<!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>