轮换图,快速切换pre和next 出现错误,求解学习

第一次发,如有不对敬请指导。运行地址https://hzh480048.github.io/text1/%E8%BD%AE%E6%8D%A2%E5%9B%BE2.html

不多说上代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>轮换图</title>
	</head>
	<style>
		#dome{
			position: absolute;
			width: 590px;
			height: 470px;
			border: 1px solid #ccc;
			overflow: hidden;
			top: 20%;
			left: 30%;
			z-index: 1;
		}
		#box{
			position: absolute;
	
		}
		li{
			list-style: none;
			float: left;
		}
		.tip{
			position: absolute;
			left: 0;
			top: 400px;
		}
		.tip a{
			width: 15px;
			height: 15px;
			border: 1px solid red;
			background: red;
			float: left;
			margin: 0 5px;
			
		    /* older safari/Chrome browsers */
		    -webkit-opacity: 0.5;
		    /* Netscape and Older than Firefox 0.9 */
		    -moz-opacity: 0.5;
		    /* Safari 1.x (pre WebKit!) 老式khtml内核的Safari浏览器*/
		    -khtml-opacity: 0.5;
		    /* IE9 + etc...modern browsers */
		    opacity: .5;
		    /* IE 4-9 */
		    filter:alpha(opacity=50);
		    /*This works in IE 8 & 9 too*/
		    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
		    /*IE4-IE9*/
		}
		a:hover{
			background: black;
		}
		.but{
			position: relative;
			left: 45%;
			top: 100px;
		}
	</style>
	<body>
			<button id = 'pre' class="but">前一张</button>
			<button id = 'next' class="but">后一张</button>
		<div id="dome">
			<div id="box">
				<li><img src="//imgcps.jd.com/ling/7040368/5rW35Zuk5YWo55CD576O5aaG/5ruhMTk55YePMTAw/t-5bfe454a1e3348d2f8e16118/b3a458b1.jpg"></li>
				<li><img src="//img1.360buyimg.com/pop/s590x470_jfs/t1/43766/9/4039/77567/5cd114adEf558d38f/d11d895406b12cdf.jpg!q90!cc_590x470.webp"></li>
				<li><img src="//img1.360buyimg.com/da/s590x470_jfs/t1/62741/12/3018/98434/5d15630bE32b72ceb/0ee0e3ee19c1325a.jpg!q90!cc_590x470.webp"></li>
				<li><img src="//img1.360buyimg.com/da/s590x470_jfs/t25135/60/1075238334/85761/42a7269e/5b86ea05Ne60a95e7.jpg!q90!cc_590x470.webp"></li>
				<li><img src="//imgcps.jd.com/ling/7479547/6LaF5biC57K-6YCJ/54iG5qy-55u06ZmN/t-5bf3e1f5d45a9bab0fb69ff1/b0a18057.jpg"></li>
				<li><img src="//img1.360buyimg.com/pop/s590x470_jfs/t1/35240/39/10540/65021/5ce60d09Edd89fd64/96391f735d5910ac.jpg!q90!cc_590x470.webp"></li>
				<li><img src="//img1.360buyimg.com/pop/s590x470_jfs/t1/47378/7/3809/63470/5d19778eE81f7ffab/89e119394df00403.jpg!q90!cc_590x470.webp"></li>
				<li><img src="//imgcps.jd.com/ling/45763076372/5a6255S15riF5YeJ5a2j/5pS-5Lu355yB6Jaq54eD5oOF5LiA5aSP/t-5bd95a11ba82b80306af614e/c275b46c.jpg"></li>
				<li><img src="//imgcps.jd.com/ling/7040368/5rW35Zuk5YWo55CD576O5aaG/5ruhMTk55YePMTAw/t-5bfe454a1e3348d2f8e16118/b3a458b1.jpg"></li>
				<li><img src="//img1.360buyimg.com/pop/s590x470_jfs/t1/43766/9/4039/77567/5cd114adEf558d38f/d11d895406b12cdf.jpg!q90!cc_590x470.webp"></li>
			</div>
			<div class="tip">
					<a href="javascript:;"></a>
					<a href="javascript:;"></a>
					<a href="javascript:;"></a>
					<a href="javascript:;"></a>
					<a href="javascript:;"></a>
					<a href="javascript:;"></a>
					<a href="javascript:;"></a>
					<a href="javascript:;"></a>
			</div>
		</div>
		<script>
			 //获取所有的li数组
			var listArrr=document.getElementsByTagName("li");
			//获取box
			var box =document.getElementById("box");
			//获取第一个class=tip的div
			var tip =document.getElementsByClassName("tip")[0];
			//获取dome
			var dome =document.getElementById("dome");
			//导航点
			var  abts=document.getElementsByTagName("a");
			//前一张的button
			var  pre = document.getElementById('pre');
			//后一张的button
			var  next = document.getElementById('next');
			//设置box的宽度
			box.style.width=listArrr.length*590+"px";
			//是tip居中
			tip.style.left=dome.clientWidth/2-tip.clientWidth/2+"px";
			 //给lef负值
			box.style.left=0+'px';
			//取消定时器号
			var timer=null;
			//abts序号
			var index=0;
			//初始第一个bats为黑色
			abts[0].style.background='black';
			
			box.style.left=-590+"px"; //初始位置让第一张被看到而不是第0张
			
			
			
			function autoChage(){//自动切换
				timer = setInterval(function(){
					next.onclick();
				},3000);
			}  
			
			autoChage();//启动自动切换
			
			function start(obj,attr,target,callback){ //切换效果
				var current = parseInt(getStyle(box,'left'));//获取当前位子
				var	speed = (target-current)/8;  //移动速度
					clearInterval(obj.timer);//取消可能遗留的定时器
				obj.timer = setInterval(function(){
					var oldval = getStyle(box,'left');//获取当前位置
					var newval = parseInt(oldval)+speed; //移动后的位置
					
					if(newval>target && speed>0 ||newval<target && speed<0){//判断左右移动是否超出,超出直接=与target
						newval = target;
					}
					box.style.left = newval+"px";//修改位置
					
					if(target == newval){//达到目标停止定时器,又回调就调回调
						clearInterval(obj.timer);
						callback && callback();
					}
				},30);
				
			}
			
			function getStyle(obj,attr){//兼容,获取样式
				if(window.getComputedStyle){
					return getComputedStyle(obj,null)[attr];
				}
				else{
					return obj.currentStyle[attr];
				}
			}
			
			function setA(){ 
				for (var i = 0;i<abts.length;i++) {//导航点所有清除选中点
					abts[i].style.background='';
				}
				if(index == 8){//此时是第9张图,也就是最后一张
					index = 0;
					box.style.left = -590*index+"px";//快速切换到第0张图
				}
				if(index == -1){//此时是第0张图
					index=7;
					box.style.left = (index+1)*-590+"px";//快速切换到第9张
				}
				abts[index].style.background='black';//选中的导航点标识
			}
			
			pre.onclick = function(){//切换到前一张
				index--;
				scroll();
			}
			next.onclick = function(){//切换到后一张
				index++;
				scroll();
			}
			
			for (var i = 0;i<abts.length;i++) {//绑定所有的导航点
				abts[i].num = i;
				abts[i].onclick = function(){
					index = this.num;//将点击导航点的序号赋值给index切换
					scroll();
					
				}
				
			}
			
			function scroll(){ //启动移动效果
				clearInterval(timer);
				start(box,'lef',-590*(index+1),function(){//传值的目标是-590*(index+1),因为我是从第一长开始的而不是第0张图片
					setA();
					autoChage();
				})

			}
		</script>
	</body>
</html>

简单说一下 一共10张图片 两张过渡的 8张轮换的。
求解问题 按钮点击过快index超出。
怎么完美限制点击间隔。

错误图:在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值