轮播图

一、传统轮播

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<style>
	*{                                                            //去掉margin和padding
		margin: 0;
		padding:0;
	}
	.box{                                                         //设置外层盒子box的样式
		height: 300px;
		width:560px;
		border:1px solid pink;
		margin: 100px auto;
		position: relative;
		overflow: hidden;
	}
	.m_unit{                                                       //设置移动单元  注意:长度要尽量长
		width:5000px;
		height:300px;
		position: absolute;
		left:0;
		top:0;
	}
	.m_unit ul{                                                     //清除浮动
		overflow: hidden;
	}
	.m_unit ul li{                                                  //去掉li的小圆点 所有li浮动
		list-style: none;
                float: left;
	}
	.btn span{                                                      //设置按钮的样式
		width:55px;
		height:55px;
		position: absolute;
		top:50%;
		margin-top: -28px;
	}
	.btn .left{
		background: url('image/btnL.png');
		left:0;
	}
	.btn .right{
		background: url('image/btnR.png');
		right:0;
	}
	.circle ul{                                                        //circle 的ul样式
                position: absolute;
                bottom:10px;
                right:0;
	}                                                                  //circle 的li的样式
	.circle ul li{
		float: left;
		list-style: none;
		width:20px;
		height:20px;
		border-radius: 50%;
		background: orange;
		margin-right: 10px;
	}                                                                    //默认类名为current的小圆点为红色
	.circle ul li.current{
		background:red;
	}

</style>
<body>
	<div class="box" id="box">
		<div class="m_unit" id='m_unit'>
			<ul id='imgUl'>
				<li><a href="javascript:;"></a><img src='image/0.jpg'></li>
				<li><a href="javascript:;"></a><img src='image/1.jpg'></li>
				<li><a href="javascript:;"></a><img src='image/2.jpg'></li>
				<li><a href="javascript:;"></a><img src='image/3.jpg'></li>
				<li><a href="javascript:;"></a><img src='image/4.jpg'></li>
			</ul>
		</div>
		<div class="btn">
			<span class='left' id='leftBtn'></span>
			<span class='right' id='rightBtn'></span>
		</div>
		<div class='circle' id='circle'>
			<ul>
				<li class='current'></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
			</ul>
		</div>
	</div>


	<script src='../js/animate-3.0.js'></script>                              //引入js文件
	<script>
	    var box = document.getElementById('box');                             //获得需要的元素
	    var m_unit = document.getElementById('m_unit');
	    var imgUl = document.getElementById('imgUl');
	    var imgLis = imgUl.getElementsByTagName('li');
	    var rightBtn = document.getElementById('rightBtn');
	    var leftBtn = document.getElementById('leftBtn');
	    var imgLength = imgLis.length;
	    imgUl.appendChild(imgLis[0].cloneNode(true));                          //克隆一个假的第一张图片放到最后
	    var circle = document.getElementById('circle');
	    var circleLis = circle.getElementsByTagName('li');
        
        var timer = setInterval(function (){                                       //定时器    让轮播图自动播放
        	rightHandler();
        }, 2000);
        box.onmouseover = function (){                                             //鼠标进入box后,清除定时器
        	clearInterval(timer);
        }
        box.onmouseout = function (){                                              //鼠标离开,继续轮播
        	timer = setInterval(function (){
        	    rightHandler();
            }, 2000);
        }
        

        var idx = 0;                                                               //定义idx
	    rightBtn.onclick = rightHandler;                                       //右按钮点击事件
	    function rightHandler(){
	    	if(m_unit.isanimated) return;                                      //节流  如果m_unit是移动状态就return,防止页面乱
            idx++;                                                                

	    	animate(m_unit,{'left':-560*idx},1000,'BounceEaseOut',function (){   //m_unit每隔一秒更改left值
	    		if(idx > imgLength-1){                                      //回调  如果移动到假的图片,瞬间回到原点
            	   idx=0;
            	   m_unit.style.left = 0;                                             //根据idx代表m_unit
                }
	    	});
	    	
	    	changeCircle();                                                    //调用改变小圆点的函数  改变小圆点
	    }

	    leftBtn.onclick = function (){                                        //左按钮点击事件
	    	if(m_unit.isanimated) return;
            idx--;
            if(idx < 0){                                                          //如果idx小于0 idx等于最后一张图片的下标
            	   idx = imgLength-1;
            	   m_unit.style.left = -560*(idx+1)+'px';                          //改变left值 ,同上
                }
	    	animate(m_unit,{'left':-560*idx},1000,'BounceEaseOut');
	    	changeCircle();                                                     //改变小圆点
	    }

	    for(var i =0; i < circleLis.length; i++){                                  //小圆点的点击事件

	    	circleLis[i].idxx = i;                                                 //绑定自定义属性,规避闭包
	    	circleLis[i].onclick = function (){
	    		if(m_unit.isanimated) return;                                   //节流
	    		idx = this.idxx;                                                //当前点击的小圆点小标给了idx
	    		animate(m_unit,{'left':-560*idx},1000,'BounceEaseOut');         //根据信号量切换图片
	    		changeCircle();                                                 //改变小圆点
	    	}
	    }


	    function changeCircle(){                                                       //定义改变小圆点的函数
	    	var n = idx;                                                               //直接用idx会改变idx值,导致图片切换异常
	    	if(n == circleLis.length) n=0;                       //所以用n接收idx 再判断如果n=等于circlr数组的长度,让n=0
	    	
	    	for(var i = 0;i<circleLis.length;i++){                                    //遍历小圆点的数组   排他
	    		circleLis[i].className = '';                                      //把所有的小圆点的类名都去掉
	    	}
	    	circleLis[n].className = 'current';                                       //把n对应的的类名改为current

	    }


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

二、呼吸轮播

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<style>
	*{
		margin: 0;
		padding:0;
	}
	.box{
		height: 300px;
		width:560px;
		border:1px solid pink;
		margin: 100px auto;
		position: relative;
		overflow: hidden;
	}
	.m_unit{
		width:5000px;
		height:300px;
		position: absolute;
		left:0;
		top:0;
	}
	.m_unit ul{
		overflow: hidden;
	}
	.m_unit ul li{
		list-style: none;
                position: absolute;                                                      //全部定位到一起
                left:0;
                top:0;
                opacity: 0;                                                              //设置透明度为0  全部隐藏
                filter:alpha(opacity=0);                                                  //适配透明度
  	}
  	.m_unit ul li.current{
  		opacity: 1;                                                              //类名为current的li显示
  		filter:alpha(opacity=1);
  	}
	.btn{
		overflow: hidden;
	}
	.btn span{
		width:55px;
		height:55px;
		position: absolute;
		top:50%;
		margin-top: -28px;
	}
	.btn .left{
		background: url('image/btnL.png');
		left:0;
	}
	.btn .right{
		background: url('image/btnR.png');
		right:0;
	}
	.circle ul{
               position: absolute;
               bottom:10px;
               right:0;
	}
	.circle ul li{
		float: left;
		list-style: none;
		width:20px;
		height:20px;
		border-radius: 50%;
		background: orange;
		margin-right: 10px;
	}
	.circle ul li.current{
		background:red;
	}

</style>
<body>
	<div class="box" id="box">
		<div class="m_unit" id='m_unit'>
			<ul id='imgUl'>
				<li class='current'><a href="javascript:;"></a><img src='image/0.jpg'></li>
				<li><a href="javascript:;"></a><img src='image/1.jpg'></li>
				<li><a href="javascript:;"></a><img src='image/2.jpg'></li>
				<li><a href="javascript:;"></a><img src='image/3.jpg'></li>
				<li><a href="javascript:;"></a><img src='image/4.jpg'></li>
			</ul>
		</div>
		<div class="btn">
			<span class='left' id='leftBtn'></span>
			<span class='right' id='rightBtn'></span>
		</div>
		<div class='circle' id='circle'>
			<ul>
				<li class='current'></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
			</ul>
		</div>
	</div>


	<script src='../js/animate-3.0.js'></script>
	<script>
	    var box = document.getElementById('box');                                          //获得元素
	    var m_unit = document.getElementById('m_unit');
	    var imgUl = document.getElementById('imgUl');
	    var imgLis = imgUl.getElementsByTagName('li');
	    var rightBtn = document.getElementById('rightBtn');
	    var leftBtn = document.getElementById('leftBtn');
	    var imgLength = imgLis.length;
	    var circle = document.getElementById('circle');
	    var circleLis = circle.getElementsByTagName('li');
        
        var timer = setInterval(function (){
        	rightHandler();
        }, 2000);
        box.onmouseover = function (){
        	clearInterval(timer);
        }
        box.onmouseout = function (){
        	timer = setInterval(function (){
        	    rightHandler();
            }, 2000);
        }
        

        var idx = 0;                                                                             //定义信号量
	    rightBtn.onclick = rightHandler;
	    function rightHandler(){
	    	if(m_unit.isanimated) return;
            
            
	    	animate(imgLis[idx],{'opacity':0},1000);                                         //当前的图片淡出box 透明度为0
	    	idx++;                                                                           //信号量++
	    	if(idx == imgLength){
	    		idx = 0;
	    	}
	    	animate(imgLis[idx],{'opacity':1},1000);                                         //让加之后的idx对应的图片慢慢淡入
	    	changeCircle();
	    }

	    leftBtn.onclick = function (){
	    	if(m_unit.isanimated) return; 
	    	animate(imgLis[idx],{'opacity':0},1000);                                          
	    	idx--;
	    	if(idx < 0){                                                     //先判断,如果idx小于0 让idx等于最后一张图片的下标
	    		idx = imgLength-1;
	    	}
	    	animate(imgLis[idx],{'opacity':1},1000);
	    	changeCircle();
	    }

	    for(var i =0; i < circleLis.length; i++){

	    	circleLis[i].idxx = i;
	    	circleLis[i].onclick = function (){
	    		if(m_unit.isanimated) return;
	    		if(idx == this.idxx){               //如果idx等于当前点击的这张图片的小标,证明是同一张图片  return出去,不用改变
	    			return;
	    		}
	    		animate(imgLis[idx],{'opacity':0},1000);               //当前idx对应的图片淡出
	    		idx = this.idxx;                                       //idx值等于当前点的这张图片的下标
	    		animate(imgLis[idx],{'opacity':1},1000);               //当前idx对应的图片淡入
	    		changeCircle();
	    	}
	    }


	    function changeCircle(){
	    	var n = idx;
	    	if(n == circleLis.length) n=0;	
	    	for(var i = 0;i<circleLis.length;i++){
	    		circleLis[i].className = '';
	    	}
	    	circleLis[n].className = 'current';

	    }


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

三、间歇轮播

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<style>
	*{
		margin: 0;
		padding: 0;
	}
	.box{
		width:500px;
		height:200px;
		border:1px solid gray;
		margin: 100px auto;
		position: relative;
		overflow: hidden;
	}
	ul{
		position: absolute;
		left:0;
		top:0;
	}
	li{
		width: 500px;
		height:50px;
		line-height: 50px;
		list-style: none;
	}
</style>
<body>
	<div class="box" id='box'>
		<ul id = 'boxUl'>
			<li>红红在摇头</li>
			<li>黄黄跟着摇头</li>
			<li>粉粉一直摇头</li>
			<li>蓝蓝看着红红</li>
			<li>青青不知所措</li>
			<li>橙橙也在摇头</li>
			<li>紫紫疯了</li>
		</ul>
	</div>
    <script src='../js/animate-3.0.js'></script>
	<script>

	var box = document.getElementById('box');                                   //获得元素
	var boxUl = document.getElementById('boxUl'); 
	var boxLis = document.getElementsByTagName('li');
	boxUl.innerHTML += boxUl.innerHTML;                                         //拼接boxul里面的内容  复制一遍 内容翻倍
	lisLength = boxLis.length;

    var idx = 0;                                                                    //定义信号量
    setInterval(function (){                                                        //定时器 自动轮播
        idx++;                                                                      //idx++
        
    	animate(boxUl,{'top':-50*idx},1000,function(){                              //改变boxUl的top值 移动boxUl 进而显示不同的li
	    		if(idx == lisLength/2){                    // 回调函数 如果idx等于li数组的长度的一半 或者也可以在拼接假li之前
	        	idx = 0;                                      获得数组长度 这里可以直接等于数组长度 不用除2  
	        	boxUl.style.top = 0;                                        //迅速将imgUl的值等于0 拉回原点
	        }
    	});
    }, 2000)
	</script>
	
</body>
</html>

四、三位置轮播

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<style>
	*{
		margin: 0;
		padding:0;
	}
	.box{
		height: 300px;
		width:560px;
		border:1px solid pink;
		margin: 100px auto;
		position: relative;
		overflow: hidden;
	}
	
	.m_unit ul{
		overflow: hidden;
	}
	.m_unit ul li{
		position: absolute;                                            //全部定位在box盒子的右边
		left:560px;
		top:0;
		list-style: none;
	}
	.m_unit ul li.current{                                                  //类名current对应的li定位在盒子中 left为0
		left:0;
	}
	.btn{
		overflow: hidden;
	}
	.btn span{
		width:55px;
		height:55px;
		position: absolute;
		top:50%;
		margin-top: -28px;
	}
	.btn .left{
		background: url('image/btnL.png');
		left:0;
	}
	.btn .right{
		background: url('image/btnR.png');
		right:0;
	}
	.circle ul{
                position: absolute;
                bottom:10px;
                right:0;
	}
	.circle ul li{
		float: left;
		list-style: none;
		width:20px;
		height:20px;
		border-radius: 50%;
		background: orange;
		margin-right: 10px;
	}
	.circle ul li.current{
		background:red;
	}

</style>
<body>
	<div class="box" id="box">
		<div class="m_unit" id='m_unit'>
			<ul id='imgUl'>
				<li class='current'><a href="javascript:;"></a><img src='image/0.jpg'></li>
				<li><a href="javascript:;"></a><img src='image/1.jpg'></li>
				<li><a href="javascript:;"></a><img src='image/2.jpg'></li>
				<li><a href="javascript:;"></a><img src='image/3.jpg'></li>
				<li><a href="javascript:;"></a><img src='image/4.jpg'></li>
			</ul>
		</div>
		<div class="btn">
			<span class='left' id='leftBtn'></span>
			<span class='right' id='rightBtn'></span>
		</div>
		<div class='circle' id='circle'>
			<ul>
				<li class='current'></li>
				<li></li>
				<li></li>
				<li></li>
				<li></li>
			</ul>
		</div>
	</div>


	<script src='../js/animate-3.0.js'></script>
	<script>
	    var box = document.getElementById('box');                         //获得元素
	    var m_unit = document.getElementById('m_unit');
	    var imgUl = document.getElementById('imgUl');
	    var imgLis = imgUl.getElementsByTagName('li');
	    var rightBtn = document.getElementById('rightBtn');
	    var leftBtn = document.getElementById('leftBtn');
	    var imgLength = imgLis.length;
	    var circle = document.getElementById('circle');
	    var circleLis = circle.getElementsByTagName('li');
        
        var timer = setInterval(function (){                                     //自动轮播
        	rightHandler();
        }, 2000);
        box.onmouseover = function (){
        	clearInterval(timer);
        }
        box.onmouseout = function (){
        	timer = setInterval(function (){
        	    rightHandler();
            }, 2000);
        }
        

        var idx = 0;
	    rightBtn.onclick = rightHandler;
	    function rightHandler(){
	    	if(m_unit.isanimated) return;
	        animate(imgLis[idx],{'left':-560},1000);                             //当前idx对应的图片li移动到box盒子的左边
            idx++;
            if(idx > imgLength-1){                                                   //循环
            	idx = 0;	
            }
            imgLis[idx].style.left = 560+'px';                                       //瞬间把下一张图片移动到box右边的位置
	        animate(imgLis[idx],{'left':0},1000);                                //动画 把右侧的图片移动到box中间
	       

	    	changeCircle();
	    }

	    leftBtn.onclick = function (){
	    	if(m_unit.isanimated) return;
	    	animate(imgLis[idx],{'left':560}, 1000);                             //把当前idx对应的图片li移动到box右边的位置
            idx--;
            if(idx < 0){  
            	idx = imgLength - 1; 
            }
            imgLis[idx].style.left = -560 + 'px';                                    //瞬间把下一张图片移动到box左边的位置
            animate(imgLis[idx],{'left':0}, 1000);                                   //动画 把左侧的图片移动到box中间
	    	changeCircle();
	    }

	    for(var i =0; i < circleLis.length; i++){

	    	circleLis[i].idxx = i;
	    	circleLis[i].onclick = function (){
	    		if(m_unit.isanimated) return;
	    		if(idx > this.idxx){                                      //如果当前idx大于点击的idx 说明图片应该从左边往右
	    			imgLis[this.idxx].style.left = -560 + 'px';       //设置当前点击的图片在box左边
	    			animate(imgLis[this.idxx],{'left':0},1000);       //动画  从左到右的效果
	    			animate(imgLis[idx],{'left':560},1000);           //动画  当前的图片缓慢移动到box右侧
	    		}else{
	    			if(m_unit.isanimated) return;
		    		if(idx < this.idxx){                               //与上面相反    同理可得
		    			imgLis[this.idxx].style.left = 560 + 'px';
		    			animate(imgLis[this.idxx],{'left':0},1000);
		    			animate(imgLis[idx],{'left':-560}, 1000)
		    		}
		    	}
	    		idx = this.idxx;                                           //把idxx赋值给idx  调用改变小圆点事件
	    		changeCircle();
	    	}
	    }


	    function changeCircle(){
	    	for(var i = 0;i<circleLis.length;i++){
	    		circleLis[i].className = '';
	    	}
	    	circleLis[idx].className = 'current';

	    }


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值