为了账号安全,请及时绑定邮箱和手机立即绑定

为什么给多个对象就不能实现链式运动了?用1个运动还是可以的。

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);
							});
						});
					}
				}


正在回答

2 回答

内部函数里面的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);

                });

            });

        }


1 回复 有任何疑惑可以回复我~

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,没有找到对象

2 回复 有任何疑惑可以回复我~
#1

啊啊啊啊123

这是什么原理啊?
2016-07-15 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么给多个对象就不能实现链式运动了?用1个运动还是可以的。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信