xld
2016-06-06 10:50
var oProduct = document.getElementById('product'); var oImg = oProduct.getElementsByTagName('li'); for(var i=0,l=oImg.length;i<l;i++){ /* 给每个对象都加个定时器timer */ oImg[i].timer = null; oImg[i].onmouseover=function(){ startMove(this,'opacity',100,function(){ startMove(oImg[i],'height',150,function(){ startMove(oImg[i],'width',250); }); }); } oImg[i].onmouseout = function(){ startMove(this,'width',200,function(){ startMove(oImg[i],'height',200,function(){ startMove(oImg[i],'opacity',30); }); }); } }
内部函数里面的this对象指的是window对象。你可以在window.onload外面定义一个window属性
var i = '这个i是window的属性';
然后把你贴出的这部分代码改成
olmg[i].i = '这个i是oImg[i]的属性';
oImg[i].onmouseover = function () {
alert(this.i);
startMove(_this, 'opacity', 100, function () {
alert(this.i);
});
}
你就可以看到这两个this分别指的什么,也就是说镶套函数里面已经不能够再用this代表olmg[i],只能在这个函数执行的时候把olmg[i]赋给一个变量,我这里定义一个that变量,就保存了调用这个函数的olmg[i]的引用
oImg[i].onmouseover = function () {
var that = this;
startMove(that, 'opacity', 100, function () {
startMove(that, 'height', 150, function () {
startMove(that, 'width', 250);
});
});
}
oImg[i].onmouseover = function () {
var _this = this;
startMove(_this, 'opacity', 100, function () {
startMove(_this, 'height', 150, function () {
startMove(_this, 'width', 250);
});
});
}
改成这样,即可,你那种,嵌套里面的fn是找不到对应的对象的,具体可以在方法里,打印obj.nodename,就能看到嵌套里的startMove,没有找到对象
JS动画效果
113923 学习 · 1443 问题
相似问题