用JavaScript实现轮播

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/csdnlinyongsheng/article/details/87633069
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
	<style>
		*,
		::before,
		::after{
		    padding: 0;
		    margin: 0;
		    -webkit-box-sizing: border-box;/*兼容移动端主流浏览器*/
		    box-sizing: border-box;
		    -webkit-tap-highlight-color: transparent;/*清除移动端点击高亮效果*/
		}
		body{
		    font-family:Microsoft YaHei,sans-serif;/*移动端默认的字体*/
		    font-size: 14px;
		    color: #333;
		}
		ol,ul{
		    list-style: none;
		}
		/*清除浮动*/
		.clearfix::before,
		.clearfix::after{
		    content: "";
		    display: block;
		    height: 0;
		    line-height: 0;
		    visibility: hidden;
		    clear: both;
		}

		.layout{
		    width: 100%;
		    max-width: 750px;
		    min-width: 320px;
		    margin: 0 auto;
		    position: relative;
		}
		.banner{
		    width: 100%;
		    overflow: hidden;
		    position: relative;
		}
		.banner ul:first-child{
		    width: 1000%;
		    -webkit-transform: translateX(-10%);
		    transform: translateX(-10%);
		}
		.banner ul:first-child li{
		    width: 10%;
		    float: left;
		}
		.banner ul:first-child li a{
		    display: block;
		    width: 100%;
		}
		.banner ul:first-child li a img{
		    width: 100%;
		    display: block;
		}
		.banner ul:last-child{
		    position: absolute;
		    bottom: 6px;
		    width: 100%;
		    text-align: center;
		}
		.banner ul:last-child li{
		    width: 6px;
		    height: 6px;
		    border: 1px solid #fff;
		    border-radius: 50%;
		    display: inline-block;
		    margin-left: 10px;
		}
		.banner ul:last-child li:first-child{
		    margin-left: 0;
		}
		.banner ul:last-child li.now{
		    background: #fff;
		}
	</style>
</head>
<body>
	<div class="layout">
	    <div class="banner">
	        <ul class="clearfix">
	            <li><a href="#"><img src="images/1.jpg"></a></li>
	            <li><a href="#"><img src="images/2.webp"></a></li>
	            <li><a href="#"><img src="images/1.jpg"></a></li>
	            <li><a href="#"><img src="images/2.webp"></a></li>
	            <li><a href="#"><img src="images/1.jpg"></a></li>
	            <li><a href="#"><img src="images/2.webp"></a></li>
	            <li><a href="#"><img src="images/1.jpg"></a></li>
	        </ul>
	        <ul>
	            <li class="now"></li>
	            <li></li>
	            <li></li>
	            <li></li>
	            <li></li>
	        </ul>
	    </div>
	</div>
	<script>
		var imageCount = 5;
		var banner = document.querySelector(".banner");
		var width = banner.offsetWidth;
		var imageBox = banner.querySelector("ul:first-child");
		var pointBox = banner.querySelector("ul:last-child");
		var points = pointBox.querySelectorAll("li");
		window.my = {};

		var addTransition = function()
		{
			imageBox.style.transition = "all 0.3s";
			imageBox.style.webkitTransition = "all 0.3s";
		}
		var removeTransition = function()
		{
			imageBox.style.transition = "none";
			imageBox.style.webkitTransition = "none";
		}
		var setTranslateX = function(translateX)
		{
			imageBox.style.transform = "translateX("+translateX+"px)";
			imageBox.style.webkitTransform = "translateX("+translateX+"px)";
		}

		var index = 1;
		var timer = setInterval(function(){
			index ++;
			addTransition();
			setTranslateX(-index*width);
		}, 2000);
		my.transitionEnd = function(dom, callback)
		{
			if(!dom || typeof dom != "object")
			{
				return false;
			}
			dom.addEventListener("transitionEnd", function(){
				callback && callback();
			});
			dom.addEventListener("webkitTransitionEnd", function(){
				callback && callback();
			})
		}
		my.transitionEnd(imageBox, function(){
			if(index > imageCount)
			{
				index = 1;
			}
			else if(index <= 0)
			{
				index = imageCount;
			}
			removeTransition();
			setTranslateX(-index*width);
			setPoint();
		});
		var setPoint = function()
		{
			for(var i = 0; i < points.length; i++)
			{
				points[i].className = "";
			}
			points[index-1].className = "now";
		}
		var startX = 0;
		var moveX = 0;
		var distanceX = 0;
		var isMove = false;

		imageBox.addEventListener("touchstart", function(e){
			clearInterval(timer);
			startX = e.touches[0].clientX;
			console.log("stargX" + startX);
		})
		imageBox.addEventListener("touchmove", function(e){
			moveX = e.touches[0].clientX;
			distanceX = moveX - startX;
			removeTransition();
			setTranslateX(-index * width + distanceX);
			isMove = true;
		})
		imageBox.addEventListener("touchend", function(e){
			if(isMove && Math.abs(distanceX) > width/5)
			{
				if(distanceX > 0)
				{
					index --;
				}
				else
				{
					index ++;
				}
			}
			addTransition();
			setTranslateX(-index * width);

			if(index > imageCount)
			{
				index = 1;
			}
			else if(index <= 0)
			{
				index = imageCount;
			}
			setPoint();

			//重置参数
	        startX = 0;
	        moveX = 0;
	        distanceX = 0;
	        isMove = false;
	        //加定时器
	        clearInterval(timer);   //严谨 再清除一次定时器
	        timer= setInterval(function(){
	            index++ ;  //自动轮播到下一张
	            addTransition();    //加过渡动画
	            setTranslateX(-index * width);    //定位
	        },3000);
		})
		
	</script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/csdnlinyongsheng/article/details/87633069