js轮播图

把html和css样式写好


<div id="box1">
			<ul id="imglist">
				<li><img src="../img/001.jpeg" alt=""></li>
				<li><img src="../img/002.jpeg" alt=""></li>
				<li><img src="../img/1.jpg" alt=""></li>
				<li><img src="../img/3.jpeg" alt=""></li>
				<li><img src="../img/a.jpg" alt=""></li>
				<li><img src="../img/001.jpeg" alt=""></li>
			</ul>
			<div id="navDiv">
				<a href="#"></a>
				<a href="#"></a>
				<a href="#"></a>
				<a href="#"></a>
				<a href="#"></a>
			</div>
		</div>

css样式

* {
				margin: 0;
				padding: 0;
			}
 
			ul li {
				list-style: none;
			}
 
			#box1 {
				width: 520px;
				height: 300px;
				margin: 80px auto;
				background-color: #bfa;
				padding: 10px 0;
				position: relative;
				overflow: hidden;
 
			}
 
			#imglist {
				/* width: 2600px; */
				position: absolute;
			}
 
			#imglist img {
				width: 500px;
				height: 300px;
			}
 
			#imglist li {
				float: left;
				margin: 0 10px;
			}
 
			#navDiv {
				position: absolute;
				bottom: 10px;
				/* left: 40%; */
				opacity: 0.5;
 
			}
 
			#navDiv a {
				float: left;
				width: 15px;
				height: 15px;
				margin: 0 5px;
				border-radius: 50%;
				background-color: skyblue;
 
			}
 
			#navDiv a:hover {
				background: black;
			}

js样式

//获取ul的id
			var imglist = document.getElementById('imglist');
			//获取所有的img标签
			var imgArr = document.getElementsByTagName('img');
			//设置ul的宽度,自适应
			imglist.style.width = 520 * imgArr.length + 'px';
			//获取navDiv的id
			var navDiv = document.getElementById('navDiv');
			//获取父元素box1
			var box1 = document.getElementById('box1');
			//设置div的自适应居中
			navDiv.style.left = (box1.offsetWidth - navDiv.offsetWidth) / 2 + 'px';
			//设置默认索引值
			var index = 0;
			//获取所有的a元素
			var allA = document.getElementsByTagName('a');
			//修改a元素的背景色为黑色
			allA[index].style.background = 'black';
			//为每个超链接添加遍历
			for (i = 0; i < allA.length; i++) {
				//为每个超链接加一个num属性
				allA[i].num = i;
				//给超链接绑定单机响应函数
				allA[i].onclick = function() {
					//点击时关闭自动播放定时器
					clearInterval(timer);
					//获取索引值,并赋值给index
					index = this.num;
					//点击切换图片
					// imglist.style.left=-520*index+'px';
					//调用move函数,切换图片
					move(imglist, "left", -520 * index, 20, function() {
						//动画执行完毕,开启自动播放
						autoChange();
					});
					setA();
				}
			}
			//开启自动切换
			autoChange();
 
			//创建一个可调用a的函数
			function setA() {
				//判断是否为最后一张
				if (index >= imgArr.length - 1) {
					//将索引设为0
					index = 0;
					//将偏移量归零
					imglist.style.left = 0;
				}
				for (i = 0; i < allA.length; i++) {
					allA[i].style.background = "";
				}
				allA[index].style.background = "black";
			}
 
			var timer;
			//创建一个可控制的函数方便调用
			function autoChange() {
				//创建一个定时器
				timer = setInterval(function() {
					//索引自增
					index++;
					//判断索引,不能超过最大值
					index %= imgArr.length;
					//调用move函数,切换图片
					move(imglist, "left", -520 * index, 20, function() {
						//修改a,跟随图片切换
						setA();
					});
				}, 3000);
			}

然后我们引入move.js,不然move函数不会生效

<!--引入move函数.js-->
		<script type="text/javascript" src="../js/move.js"></script>

下面是move.js里的内容

 // var timer;
        function move(obj,attr,target,speed,callback){
            clearInterval(obj.timer);//关闭上一个定时器
            var current = parseInt(getStyle(obj,attr));//获取obj当前位置
            if(current > target){
                speed = - speed;//如果当前位置大于目标位置,应该向左移动,速度为负值
            }
            obj.timer = setInterval(function(){
                var oldValue = parseInt(getStyle(obj,attr));//获取obj原来的位置
                var newValue = oldValue + speed;//设置obj移动
                if((speed < 0 && newValue < target) || (speed > 0 && newValue > target)){
                    newValue = target;//不能让移动超过边界
                }
                obj.style[attr] = newValue + "px";//设置obj现在的位置
 
                if(newValue == target){//如果obj到达目标位置,则停止移动,清除定时器
                clearInterval(obj.timer);
                callback && callback();
            }
            },30);
            
        };
 
        function getStyle(obj,name){
            if(window.getComputedStyle){
                return getComputedStyle(obj,null)[name];
            }else{
                return obj.currentStyle[name];
            };
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值