天天看點

滾動顯示消息 滑鼠懸停

<!doctype html>
<html>
<head>
<title>tweets-slide</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<style type="text/css">
ul, li {margin:0; padding:0;list-style:none}
body {
	margin: 0;
	height: 100%;
	background: #333;
}
.wp {
	position: relative;
	width: 800px;
	height: 400px;
	overflow: hidden;
	margin: 20px auto;
	border: 4px solid #121212;
	background: #fff;
}
.slider {
	position: absolute;
	width: 760px;
	padding: 0 20px;
	left:0;
	top: 0;
}
.fl {float:left}
.slider img {display:block; padding: 2px; border: 1px solid #ccc} 
.slider div {padding: 20px 0; border-bottom: 1px dashed #ccc;overflow:hidden;width:100%}
.slider p {font-size: 12px;margin:0;padding-left:68px;color:#333;line-height:20px;}
</style>
<script type="text/javascript">

var slider = function () {
//執行個體化該函數 參數已數組的形式傳遞 o {id: '', at: '', o:''}
	function init (o) {
		this.id = o.id;//要滾動的父元素id
		this.at = o.auto ? o.auto : 2;//是否自動滾動  滾動的時間 3秒
		this.o = 0;//開始的高度
		this.pos();// 設定相對位置
	}

	/**
	*通過prototype對象來定義函數
	*
	*/
	init.prototype = {
		//初始化位置 清除定時器
		pos : function () {
			clearInterval(this.__b);
			this.o = 0;
			var el = document.getElementById(this.id);//擷取父容器對象 
			var li = el.getElementsByTagName('div');//擷取對象内的滾動元素 
			var l = li.length;//滾動元素個數

			var _t = li[l-1].offsetHeight;//擷取最後一個滾動元素的高度_t
			var cl = li[l-1].cloneNode(true);//把最後一個元素拷貝一份到cl中
			cl.style.opacity = 0;//設定元素的濾鏡為透明的 
			cl.style.filter = 'alpha(opacity=0)';
			el.insertBefore(cl, el.firstChild);//把該元素添加到容器的最上方
			el.style.top = -_t + 'px';//設定相對容器的高度為負值
			this.anim();//開始動畫
		},
		//調用setInterval 為了平滑設為20毫秒調用一次
		anim : function () {
			var _this = this;
			this.__a = setInterval(function(){_this.animH()}, 20);
		},
		//移動的方法
		animH : function () {
			var _t = parseInt(document.getElementById(this.id).style.top);//擷取ul的top高度值 
			var _this = this;
			if (_t >= -1) {//如果高度大于-1 則清除定時器 設定top為零 調用下一個滾動方法anim0()
				clearInterval(this.__a);
				document.getElementById(this.id).style.top = 0;
				var list = document.getElementById(this.id).getElementsByClassName('divlist');
				document.getElementById(this.id).removeChild(list[list.length-1]);
				this.__c = setInterval(function(){_this.animO()}, 20);
				//this.auto();
			}else {//設定高度和濾鏡為不透明的
				var __t = Math.abs(_t) - Math.ceil(Math.abs(_t)*.07);
				document.getElementById(this.id).style.top = -__t + 'px';
			}
		},
		//滾動設定濾鏡透明值
		animO : function () {
			this.o += 2;
			if (this.o == 100) {
				clearInterval(this.__c);
				document.getElementById(this.id).getElementsByClassName('divlist')[0].style.opacity = 1;
				document.getElementById(this.id).getElementsByClassName('divlist')[0].style.filter = 'alpha(opacity=100)';
				this.auto();
			}else {
				document.getElementById(this.id).getElementsByClassName('divlist')[0].style.opacity = this.o/100;
				document.getElementById(this.id).getElementsByClassName('divlist')[0].style.filter = 'alpha(opacity='+this.o+')';
			}
		},
		//開始定時器 循環調用
		auto : function () {
			var _this = this;
			this.__b = setInterval(function(){_this.pos()}, this.at*1000);
		},
		stop : function () {
			var _this = this;
			clearInterval(this.__b);
			clearInterval(this.__c);
		}
	}
	return init;
}();
</script>
</head>
<body>
<div class="wp">
	<div id="slider" class="slider" onmouseover = "gundong.stop()" onmouseout = "gundong.auto()">
		<div class="divlist">
		
		<a class="fl" href="javascript:;" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" ><img src="http://pic.cnblogs.com/face/u160412.jpg" alt="" /></a>
			<p>滾動的原理:1.css的相對定位 2.setinterval的循環移動 3. 透明濾鏡</p>
		</div>
		<div class="divlist"><a class="fl" href="javascript:;" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" ><img src="http://pic.cnblogs.com/face/u160412.jpg" alt="" /></a>
			<p>滾動就是這樣的簡單 原理明白就可以了<br/> 
和雷射焊接剛看了就空間
和雷射焊接剛看了就空間<br/> 
和雷射焊接剛看了就空間。 
和雷射焊接剛看了就空間
安得與君相訣絕,免教生死作相思。</p>
		</div>
		<div class="divlist"><a class="fl" href="javascript:;" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" ><img src="http://pic.cnblogs.com/face/u160412.jpg" alt="" /></a>
			<p>setinterval函數和settimeout函數用法<br/>      
</p>
		</div>
		<div class="divlist"><a class="fl" href="javascript:;" target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow"  target="_blank" rel="external nofollow" ><img src="http://pic.cnblogs.com/face/u160412.jpg" alt="" /></a>
			<p>設定多長時間後把該方法加入到js的執行隊列中,不一定立即執行
</p>
		</div>
	</div>
</div>
<script type="text/javascript">
var gundong = new slider({id:'slider'})
</script>
</body>
</html>      

繼續閱讀