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

图片滑动有问题

滑第三个或者第四个的时候把第二个完全遮住了http://img1.sycdn.imooc.com//58469fe70001cc6302130133.jpg

正在回答

5 回答

//绑定事件

       for(var i = 0,len = imgs.length; i < len; i++){

        //为了获得不同的I值,使用立即调用表达式

        ( function(i){

            imgs[i].onmouseover = function(){

                //先将所有的门复位

                setImgsPos();

 

                //打开门

                for(var j = 1; j <= i; j++){

                    imgs[j].style.left = parseInt(imgs[i].style.left , 10) - translate + "px";

                }

 

            };

        })(i);

    }

中最后一个for循环中应该是parseInt(imgs[j].style.left,10)-translate + "px"

原因是因为鼠标移到第i个图片时,我们需要将i及其以前的图片相对于其本身移动translate的距离,而非相对于第i个图片移动。

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

for(let i = 0; i <imgs.length; i++){

    imgs[i].onmouseover = function(){

        //先将所有的门复位

        setPos();

        //打开门

        for(let j = 1; j <= i; j++){

            imgs[j].style.left = parseInt(imgs[j].style.left , 10) - translate + "px";

        }

    };

}

//使用块级作用域变量let,就不用使用立即执行的函数表达式锁住参数值i


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

去年的,,,现在是大神了吧


0 回复 有任何疑惑可以回复我~
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
	<title>滑动门</title>
	<style type="text/css">
		#container{
			height:122px;
			margin:0 auto;
			border:1px solid grey;
			overflow:hidden;
			position:relative;
		}
		#container img{
			background-color: #fff;
			position:absolute;
			display: block;
			left:0;
			border-left:1px solid grey;
		}
	</style>
	<script type="text/javascript">
		window.onload = function(){
	   //容器对象
	   var box = document.getElementById("container");

	   //获取图片的集合
	   var imgs = box.getElementsByTagName("img");

	   //定义单张图片的宽度
	   var imgWidth = imgs[0].offsetWidth;

	   //定义掩藏门的宽度
	   var exposeWidth = 61;

	   //定义总容器的宽度
	   var boxWidth = imgWidth + (imgs.length - 1) * exposeWidth;
	   box.style.width = boxWidth + "px";

	   //设置每道门的初始位置
	   //定义复位函数
	   function setImgsPos(){
	   	for(var i = 1, len = imgs.length; i < len; i++){
	   		imgs[i].style.left = imgWidth + exposeWidth * (i - 1) + "px";
	   	}
	   }
	   setImgsPos();

	   //计算每道门滑动的距离
	   var translate = imgWidth - exposeWidth;

	   //绑定事件
	   for(var i = 0,len = imgs.length; i < len; i++){
		//为了获得不同的I值,使用立即调用表达式
		( function(i){
			imgs[i].onmouseover = function(){
				//先将所有的门复位
				setImgsPos();

				//打开门
				for(var j = 1; j <= i; j++){
					imgs[j].style.left = parseInt(imgs[i].style.left , 10) - translate + "px";
				}

			};
		})(i);
	}
	}
	</script>
</head>
<body>
<div id="container">
<img src="images/sh_1.gif" alt="sh_1" title="sh_1">
<img src="images/sh_2.gif" alt="sh_2" title="sh_2">
<img src="images/sh_3.gif" alt="sh_3" title="sh_3">
<img src="images/sh_4.gif" alt="sh_4" title="sh_4">
</div>
</body>
</html>


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

不给代码咋知道是哪错了呢,我估计是你每次移动图片时,没有先将图片位置复原,再移动。

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

chenmy0917 提问者

<style type="text/css"> #container{ height:122px; margin:0 auto; border:1px solid grey; overflow:hidden; position:relative; } #container img{ background-color: #fff; position:absolute; display: block; left:0; border-left:1px solid grey; } </style>
2016-12-06 回复 有任何疑惑可以回复我~
#2

chenmy0917 提问者

在这个帖子下面的回复了我贴了代码,麻烦你帮我看一下了
2016-12-06 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

图片滑动有问题

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