无缝滚动

多复制一份做滚动

by 孙 超

HTML

<div class="box">
	<ul id="slider" class="slider">
		<li>1</li>
		<li>2</li>
		<li>3</li>
		<li>4</li>
	</ul>
</div>

CSS

*{
		margin:0;
		padding:0;
	}
	.box{
		margin:50px auto;
		width:200px;
		height:120px;
		position:relative;
		overflow:hidden;
	}
	.slider{
		height:100%;
		width:800px;
		position:absolute;
		left:0;
		top:0;
	}
	.slider li{
		float:left;
		list-style:none;
		background-color:#ccc;
		width:200px;
		height:100%;
	}
	.slider li:nth-child(2n){
		background-color:#eee;
	}
	.slider li:nth-child(3n){
		background-color:#eac;
	}
	.slider li:nth-child(4n){
		background-color:#ace;
	}

JavaScript

window.onload = function(){

		// 改变方向,只需要改变 speed 的正负即可
		var speed = 5;

		var oUl = document.getElementById("slider");

		oUl.innerHTML += oUl.innerHTML;
		var items = oUl.children;
		oUl.style.width = items[0].offsetWidth * items.length + "px";
		
		//方法2用到
		var w = oUl.offsetWidth/2;
		var left = 0;
		
		setInterval(function(){

			// 方法1,判断 oUl 的 offsetLeft 的值
			var l = oUl.offsetLeft - speed;

			if(l < -oUl.offsetWidth / 2){
				l = 0;
			} else if(l > 0){
				l = -oUl.offsetWidth / 2;
			}
			
			/*
			// 方法2,对变量 left 进行模除判断,纯粹用数学公式推导出来的,这个还是比较不错的 !!!!

			left -= speed;
			var l = 0;
		
			if(left < 0){
				l = left % w;
			} else {
				l = (left % w - w) % w;
			}
			*/

			oUl.style.left = l + "px";

		}, 30);

	};