Mr_Muze
有点类似递归的思想,一级套一级,fuction()函数传参使用,相当于一个框架。
慕无忌4172087
fn()改了 还是没用
qq_慕瓜2493294
...............你不发发代码谁知道具体是什么情况呢
qq_慕粉6336518
emmmmmmmmmm我找到问题出在哪了,但是却不知道为什么。你把if(obj.icur == end)中的obj.去掉就可以了
sUcK_lOlIpOp
回调函数 不可用this 可以在前面声明一个 var that=this;将this赋予that。
星空雪光的绮丽
icur = Math.round((getStyle(obj, attr)) * 100);
这句应该改成
icur=Math.round(parseFloat(getStyle(obj,attr))*100);
夜阑卧听风吹雨y
日久弥新
对的,在调用startMove方法的第二遍的时候this 指代的不是当前这个li标签了 稍微改一下就行 用一个指针存一下:
window.onload = function() {
var aLi = document.getElementsByTagName('li');
var _this;
for(var i = 0; i < aLi.length; i++) {
aLi[i].timer = null;
aLi[i].onmouseover = function() {
console.log(this);
_this = this;
startMove(this, 'width', 400, function() {
console.log(this);
startMove(_this, 'height', 200, function() {
startMove(_this, 'opacity', 100);
});
});
}
aLi[i].onmouseout = function() {
_this = this;
startMove(this, 'opacity', 30, function() {
startMove(_this, 'height', 100, function() {
startMove(_this, 'width', 200);
});
});
}
}
}
慕粉3122678
因为startMove()开头就有一个clearInterval(obj.timer);
fn()放前面先执行,就回调startMove(),然后直接停掉了定时器,然后就没有然后了。
伴山客
不用function(),你怎么处理Dom事件
KD_35
传参数fn时,不能用this了,可以在外边 var that = this,不然里面this的指向会变成window。
Danni11
attr 与 arrt
fly狂奔的蜗牛
第20行,if(iTarget == speed)
这里括号里应该是icur == iTarget才对。
流光皎洁11
第17行
startMove(li,1,'opacity');
应该是100
慕斯6506489
因为如果这样先判断有fn()方法时,会先执行调用fn()方法然后执行clearintval(),但是这时候浏览器并不会等到fn()方法执行完才去调用clearintval().它会直接清除fn()内的定时器。正好老师下节课会讲到同时调用两个 startMove()方法时会遇到的问题,这时只会执行第二个startMove()方法而不会一个一个调用也不会同时调用,原因就是第一个startMove()方法还没执行完第二个startMove()里的clearintval()就把第一个startMove()计时器清除了。这和你问的问题应该是同一个道理吧。个人理解,适当参考。
慕粉2613161
//取当前的值
if(attr=='opacity'){
icur=Math.round(parseFloat(getStyle(obj,attr))*100);
}//3.检测停止
if(attr='opacity'){
obj.style.filter='alpha(opacity:'+(icur+speed)+')';
obj.style.opacity=(icur+speed)/100;
}上面的代码都判断了有opacity的情况,并在条件语句中做出了反应。
我爱小小小橘子
for (var i = 0; i < oli.length; i++)
RoseMarry
找到问题原因么有,我的也是向上向下取整了还是会这样
ramberLei
我调试了没问题啊,透明度-宽-高 依次变化~
lulubiu
暮女神
暮女神
看着就不一样,代码长度都不一样。
_沐雨
我猜是this的的作用域问题,onmouseover内的function函数应该把this传参,因为第二个function中的this不再指向op本身。相关的this 问题我也不太明白,正学习
应改为
op.onmouseover = function() {
var that = this //将this传参
yd(that, "height", 300, function() {
yd(that,"width",400); });
}
不知道对不对,共勉。
俊臣
加油,我现在都后悔没早点学习了,马上实习了
weibo_happy的小小明_0
找到原因了<script type="js/move.js"></script>应该写成<script src="js/move.js"></script>
徐无敌
里面的this指向window
young214
因为ie下 css样式就是那么写的原css是 {filter:alpha(opacity:100)} 不起作用就是你没写对
徐锦杰
看了半天才弄明白你的意思:
startMove(li1,400, 'width', startMove(li1,200,'height'));
startMove(li1,200,'height')意思是立即执行这个函数,这是一个执行的动作,不能作为参数传递。
startMove(li1,400, 'width', function(){startMove(li1,200,'height')});function(){startMove(li1,200,'height')}是定义一个匿名函数,函数内随便执行什么。
不知道我这样有没有说清楚
慕仰0443758
startMove(this,'width',400,function(){
startMove(this,'height',400,function(){
startMove(this,'opacity',100);
把后两个this换成你定义的test。
判断 this 指向谁,看执行时而非定义时,只要函数(function)没有绑定在对象上调用,它的 this 就是 window。
你会发现按照你原来的代码写的话,它只变了width,height和opacity都没有变,显示的错误是window.getStyle...,这说明后两个startMove()函数全都去操做window对象了,而不是id为test的div。
慕仰0443758
找到原因了, icur = Math.round(parseFloat(obj,attr)*100);这里没加getStyle,但是谷歌浏览器居然不给报错