未实现运动效果,后续再次尝试验证
getStyle,上面针对IE浏览器,下面针对火狐浏览器。获取css样式的值
currentStyle 针对IE浏览器。getComputedStyle 针对firefox浏览器
对于要使用JS操作CSS的值,注意其他样式是否会导致我们需要操作的CSS属性值的改变。
获取属性兼容性JS代码段:
function attr(obj, attr) {
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
return obj.getComputedStyle(obj, false)[attr]
}
}
function getStyle(obj,attr){//获取样式
if(obj.currentStyle){
return obj.currentStyle[attr];//currentStyle针对IE浏览器
}
else{
return getComputedStyle(obj,false)[attr];//针对Firefox浏览器
}
}
获取的时候:parseInt(getStyle(obj,‘width’))
window.onload=function(){
var para=document.getElementsByTagName("li");
for(var i=0;i<para.length;i++){
para[i].timer=null;
para[i].onmouseover=function(){
startMove(this,500);
}
para[i].onmouseout=function(){
startMove(this,300);
}
}
function startMove(obj,target){
clearInterval(obj.timer);
obj.timer=setInterval(function()
{
var speed=(target-obj.offsetWidth)/20;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
if(obj.offsetWidth==target){
clearInterval(obj.timer);
}
else{
obj.style.width=obj.offsetWidth+speed+"px";
}
},30)
}
}
ss
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>多物体运动</title>
<style type="text/css">
*{
padding:0;
margin:0;
}
ul,li{
list-style: none;
}
ul li{
width:200px;
height:100px;
line-height: 100px;
background-color: chartreuse;
margin-bottom:20px;
opacity: 0.3;
border: 2px solid #000;
font-size: 18px;
color: #000;
}
</style>
<script type="text/javascript">
window.onload=function(){
var aLi=document.getElementsByTagName('li');
for(var i=0;i<aLi.length;i++){
aLi[i].timer=null;
//width运动与opacity运动分开设定定时器
aLi[i].timerOpacity=null;
aLi[i].alpha=30;
aLi[i].onmouseover=function(){
startMove(this,400,100);
}
aLi[i].onmouseout=function(){
startMove(this,100,20);
}
}
// var timer=null;
//设置共用定时器会导致多个目标争抢同一个定时器,导致每一个之前触发的物体运动无法结束,多物体运动不能设置共用变量,所以需要为每个li设置单独定时器
function startMove(obj,iTarget,iOpacity){
clearInterval(obj.timer);
clearInterval(obj.timerOpacity);
obj.timer=setInterval(function(){
//这里不使用offsetWidth是因为它包含了边框等宽度,无法使元素本身的width达到目标值
var speed=(iTarget-parseInt(getStyle(obj,'width')))/8;
speed=speed>0?Math.ceil(speed):Math.floor(speed);
if(parseInt(getStyle(obj,'width'))==iTarget){
clearInterval(obj.timer);
}else{
//parseInt()取整数数字,去掉属性单位
obj.style.width=parseInt(getStyle(obj,'width'))+speed+'px';
obj.style.fontSize=parseInt(getStyle(obj,'fontSize'))+speed/10+'px';
}
},30)
function getStyle(obj,attr){
if(obj.currentStyle){
//针对IE获取元素某项css属性
return obj.currentStyle[attr];
}else{
//针对其他浏览器
return getComputedStyle(obj,false)[attr];
}
}
obj.timerOpacity=setInterval(function(){
// var oSpeed=(iOpacity-obj.style.opacity)/10;
//变速的值使得无法达成obj.alpha==iOpacity(小数存在),先使用匀速
if(obj.alpha>iOpacity){
oSpeed=-10;
}else{
oSpeed=10;
}
if(obj.alpha==iOpacity){
clearInterval(obj.timerOpacity);
}else{
obj.alpha+=oSpeed;
obj.style.opacity=obj.alpha/100;
}
},30)
}
}
</script>
</head>
<body>
<ul>
<li>ABC</li>
<li>EFG</li>
<li>123</li>
</ul>
</body>
</html>
获取样式值封装函数
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
return getComputedStyle(obj,false)[attr]
}
}
getStyle()

1、dom.style.xxx 这种写法只能获取行内样式 例如 <div ></div> div.style.width能获取到是200px,但是没有出现在 引号中的样式是获取不到的 2、万能方法。 getComputedStyle(div,null).xxx 这个是标准方法,需要做一下兼容 currentStyle 是IE的 3、友情赠送获取任何样式的代码 function getStyle(obj,style){//引用时style要带引号 if(obj.currentStyle){ return obj.currentStyle[style]; }else{ return getComputedStyle(obj,null)[style]; } }
设置width的style写在div里和写在文档开头的<style></style>里,获取的div元素的oDiv.style.width不一样(后者会把border padding等的宽度也加上)
parseInt()是获取整数