自欺欺人3104318
就是没有把画面跟上
自欺欺人3104318
是里面的方法写的有问题
专注程序不可自拔
在move.js里面有定义
_半人
你在浏览器里调试一下,就很容易发现问题的,我写代码时,第一遍,总出点毛病,调式多了,就会了;
qq_Justcomplete_04021004
obj.style.attr=icur+speed+'px';改为 obj.style[attr]=icur+speed+'px';自己找到问题所在了
我爱小小小橘子
浏览器兼容问题
箫闻
obj.timer=setInterval(......) 这里已经给予定时器了 这里的timer其实是没有多少意义的 因为后续的处理都是针对各个对象的定时器 而不是这个命名的timer 所以这个例子注释掉是没有影响的 这个timer在整个程序运行过程中其实并没有参与
徐锦杰
因为只有一个定时器。你调用两次。。。
Mr_国产青年Javency
慕粉2245163752
中括号? 你指的JSON吗? 你是不是想问json属性名是否需要加引号?通常情况下不加引号可以使用,但json作为一种通用性的数据格式,所以必须保持严格性,不然在跨语言开发就会很麻烦,并且不加引号的话,在JS中有时也会造成混乱,所以必须为了保证其严格性,必须要加引号。
昨天今天0
var icur=parseInt(getStyle(obj,'width'));位置不对
di7xian
你可以封装一个函数来得到当前元素的宽度,就不会受边框宽度的影响了。
//获取样式
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];//IE
}else{
return getComputedStyle(obj,false)[attr];//firefox
}
}
这样来进行运动obj为运动的元素
obj.style.width=parseInt(getStyle(obj,"width"))-1+"px";
qq_耿阳阳_0
28行少加一个括号,30行也错了。
AINIforever
怎么会 老师就是用chrome测试的 你粘贴下你的完整代码 我看看
风骚小王子
一下是基于题主的代码稍微修改的,可以运行。题主细心察看一下改动之处。
<!DOCTY html>
<html>
<head>
<meta charset="UTF-8">
<title>任意属性/链式运动</title>
<style type="text/css">
body,div{
margin:0;
padding:0;}
#div1{
width:200px;
height:200px;
border:1px solid yellow;
background-color:blue;
}
#div2{
width:200px;
height:200px;
border:1px solid green;
background:red;
}
</style>
<script type="text/javascript">
window.onload=function(){
var mId=document.getElementById('div1');
//console.log(getStyle(mId,'width'));
mId.onmouseover=function(){
startmove(this,'width',400);}
mId.onmouseout=function(){
startmove(this,'width',200);}
}
function getStyle(obj,attr){
var myStyle=null;
if(obj.currentStyle){
myStyle=obj.currentStyle[attr];
}else{
myStyle=getComputedStyle(obj,null)[attr];
}
return myStyle;
}
var speed=0;
function startmove(obj,attr,target){
window.clearInterval(obj.timer);
obj.timer=window.setInterval(function(){
var att=parseInt(getStyle(obj,attr));
speed=(target-att)/20;
speed>0?speed=Math.ceil(speed):speed=Math.floor(speed);
console.log(speed);
if(att==target){
window.clearInterval(obj.timer);
}else{obj.style[attr]=att+speed+'px';}
},200);
}
</script>
</head>
<body>
<div id="div1" >
333
</div>
<div id="div2">
222
</div>
</body>
</html>
慕娘4728584
i < ali.length 不是<= 长度只有3 你却赋了4次值 要仔细
慕函数2913320
自己定义和封装的,不属于js库。
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}else{
return getComputedStyle(obj,false)[attr];
}
}
ZXJ03
var timer;
window.onload = function(){
var div1 = document.getElementById("div1");
var div2 = document.getElementById("div2");
div1.onmouseover = function(){
startMove(this,"height",300);
}
div1.onmouseout = function(){
startMove(this,"height",100);
}
}
function startMove(obj,attr,iTarget){
clearInterval(timer);
timer = setInterval(function(){
var icur = parseInt(getStyle(obj,attr));
var speed = (iTarget - icur) / 5;
speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
if(icur==iTarget){
clearInterval(timer);
}
else{
obj.style[attr] = icur + speed + 'px';
}
},50);
}
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}
else{
return getComputedStyle(obj,false)[attr];
}
}var icur = parseInt(getStyle(obj,attr)); 这句写在setInterval 里面 否则定时器不能每次获得新的属性值
qq_小火车_04020340
因为传入的 attr = 'width' ,是带引号的,
即 obj.style.width === obj.style.['width'];
慕粉4019556
JS中 obj.style.attr 只能获取行内样式(内联样式),直接使用style.width需要将样式放在行内。而样式设定一般不使用行内样式。
要获取非行内样式要通过obj.currentStyle[attr]或者getComputedStyle(obj,false)[attr]方法获取,因此将获取非行内样式的方法封装为getStyle函数。
一个人一首歌0
getStyle里面的if(obj,currentStyle),应该是用点号if(obj.currentStyle)
weibo_本宫li不矫情
是回不去的原因
郑尔多斯
我把你的代码运行后没有出现你说的问题啊


宝慕林2917688
已经解决 var icu=parseInt(getStyle(obj,'[attr]'));改为var icu=parseInt(getStyle(obj,attr));
叶绿体线粒体
同学 你的getStyle没有封装啊
function getStyle(obj,attr){
if(obj.currentStyle){
return obj.currentStyle[attr];
}
else{
return getComputedStyle(obj,false)[attr];
}
}
qq_yEs先生_53591812
老师漏了个地方没讲,他为什么要把原本.attr改成
引用startMove函数时填上的参数是这样的
是不是都有引号,你想想加入写成obj.style.attr引用时是不是应该不加引号,但是不加引号又会导致和getStyle函数冲突,如图
所以要加引号,要把.attr变成[attr]。
有不明白的地方请继续提问
幕布斯9117294
obj.style.width 只能获取行内的样式,封装的getStyle函数可以获取任意地方的样式
慕标2475242
startMove(this,300);你的css原来样式为200px啊
weibo_张张张张张大仙呀_03578611
1.obj.style.width = icur + speed + 'px';//这里只能获取宽度属性
改成:obj.style[attr]=icur + speed + 'px';
Mycat_
onmouseout写成onmouseover了。