JavaScript 圖片切換展示效果

來源:互聯網
上載者:User

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<title>JavaScript 圖片滑動轉場效果</title>

<script type="text/javascript">

var $ = function (id) {

return "string" == typeof id ? document.getElementById(id) : id;

};

 

var Extend = function(destination, source) {

for (var property in source) {

destination[property] = source[property];

}

return destination;

}

 

var CurrentStyle = function(element){

return element.currentStyle || document.defaultView.getComputedStyle(element, null);

}

 

var Bind = function(object, fun) {

var args = Array.prototype.slice.call(arguments).slice(2);

return function() {

return fun.apply(object, args.concat(Array.prototype.slice.call(arguments)));

}

}

 

var Tween = {

Quart: {

easeOut: function(t,b,c,d){

return -c * ((t=t/d-1)*t*t*t - 1) + b;

}

},

Back: {

easeOut: function(t,b,c,d,s){

if (s == undefined) s = 1.70158;

return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;

}

},

Bounce: {

easeOut: function(t,b,c,d){

if ((t/=d) < (1/2.75)) {

return c*(7.5625*t*t) + b;

} else if (t < (2/2.75)) {

return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;

} else if (t < (2.5/2.75)) {

return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;

} else {

return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;

}

}

}

}

 

 

//容器物件,滑動對象,切換數量

var SlideTrans = function(container, slider, count, options) {

this._slider = $(slider);

this._container = $(container);//容器物件

this._timer = null;//定時器

this._count = Math.abs(count);//切換數量

this._target = 0;//目標值

this._t = this._b = this._c = 0;//tween參數

this.Index = 0;//當前索引

this.SetOptions(options);

this.Auto = !!this.options.Auto;

this.Duration = Math.abs(this.options.Duration);

this.Time = Math.abs(this.options.Time);

this.Pause = Math.abs(this.options.Pause);

this.Tween = this.options.Tween;

this.onStart = this.options.onStart;

this.onFinish = this.options.onFinish;

var bVertical = !!this.options.Vertical;

this._css = bVertical ? "top" : "left";//方向

//樣式設定

var p = CurrentStyle(this._container).position;

p == "relative" || p == "absolute" || (this._container.style.position = "relative");

this._container.style.overflow = "hidden";

this._slider.style.position = "absolute";

this.Change = this.options.Change ? this.options.Change :

this._slider[bVertical ? "offsetHeight" : "offsetWidth"] / this._count;

};

SlideTrans.prototype = {

  //設定預設屬性

  SetOptions: function(options) {

this.options = {//預設值

Vertical:true,//是否垂直方向(方向不能改)

Auto:true,//是否自動

Change:0,//改變數

Duration:50,//滑動期間

Time:10,//滑動延時

Pause:2000,//停頓時間(Auto為true時有效)

onStart:function(){},//開始轉換時執行

onFinish:function(){},//完成轉換時執行

Tween:Tween.Quart.easeOut//tween運算元

};

Extend(this.options, options || {});

  },

  //開始切換

  Run: function(index) {

//修正index

index == undefined && (index = this.Index);

index < 0 && (index = this._count - 1) || index >= this._count && (index = 0);

//設定參數

this._target = -Math.abs(this.Change) * (this.Index = index);

this._t = 0;

this._b = parseInt(CurrentStyle(this._slider)[this.options.Vertical ? "top" : "left"]);

this._c = this._target - this._b;

this.onStart();

this.Move();

  },

  //移動

  Move: function() {

clearTimeout(this._timer);

//未到達目標繼續移動否則進行下一次滑動

if (this._c && this._t < this.Duration) {

this.MoveTo(Math.round(this.Tween(this._t++, this._b, this._c, this.Duration)));

this._timer = setTimeout(Bind(this, this.Move), this.Time);

}else{

this.MoveTo(this._target);

this.Auto && (this._timer = setTimeout(Bind(this, this.Next), this.Pause));

}

  },

  //移動到

  MoveTo: function(i) {

this._slider.style[this._css] = i + "px";

  },

  //下一個

  Next: function() {

this.Run(++this.Index);

  },

  //上一個

  Previous: function() {

this.Run(--this.Index);

  },

  //停止

  Stop: function() {

clearTimeout(this._timer); this.MoveTo(this._target);

  }

};

</script>

</head>

<body>

<style type="text/css"> 

.container, .container img{width:280px; height:200px;}

.container{border:1px solid #333;}

.container img{border:0;}

</style>

<div class="container" id="idContainer">

<table id="idSlider" border="0" cellpadding="0" cellspacing="0">

<tr>

<td><a href="http://www.cnblogs.com/cloudgamer/archive/2009/01/06/Tween.html"><img src="http://images.cnblogs.com/cnblogs_com/cloudgamer/143727/r_rt_1.jpg"/></a></td>

</tr>

<tr>

<td><a href="http://www.cnblogs.com/cloudgamer/archive/2008/07/21/ImgCropper.html"><img src="http://images.cnblogs.com/cnblogs_com/cloudgamer/143727/r_rt_5.jpg"/></a></td>

</tr>

<tr>

<td><a href="http://www.cnblogs.com/cloudgamer/archive/2008/11/17/Drag.html"><img src="http://images.cnblogs.com/cnblogs_com/cloudgamer/143727/r_rt_3.jpg"/></a></td>

</tr>

</table>

</div>

<br />

<br />

<style type="text/css">

.num{ position:absolute; right:5px; bottom:5px;}

.num li{

float: left;

list-style:none;

color: #fff;

text-align: center;

line-height: 16px;

width: 16px;

height: 16px;

font-family: Arial;

font-size: 12px;

cursor: pointer;

margin: 1px;

border: 1px solid #707070;

background-color: #060a0b;

}

.num li.on{

line-height: 18px;

width: 18px;

height: 18px;

font-size: 14px;

border: 0;

background-color: #ce0609;

font-weight: bold;

}

</style>

<div class="container" id="idContainer2">

<table id="idSlider2" border="0" cellpadding="0" cellspacing="0">

<tr>

<td><a href="http://www.cnblogs.com/cloudgamer/archive/2009/03/11/color.html"><img src="http://images.cnblogs.com/cnblogs_com/cloudgamer/143727/r_4.jpg"/></a></td>

<td><a href="http://www.cnblogs.com/cloudgamer/archive/2008/12/24/Slider.html"><img src="http://images.cnblogs.com/cnblogs_com/cloudgamer/143727/r_3.jpg"/></a></td>

<td><a href="http://www.cnblogs.com/cloudgamer/archive/2008/12/03/Resize.html"><img src="http://images.cnblogs.com/cnblogs_com/cloudgamer/143727/r_rt_2.jpg"/></a></td>

</tr>

</table>

<ul class="num" id="idNum">

</ul>

</div>

<br />

<div>

<input id="idAuto" type="button" value="停止" />

<input id="idPre" type="button" value="&lt;&lt;" />

<input id="idNext" type="button" value="&gt;&gt;" />

<select id="idTween">

<option value="0">預設緩動</option>

<option value="1">方式1</option>

<option value="2">方式2</option>

</select>

</div>

<script>

 

new SlideTrans("idContainer", "idSlider", 3).Run();

 

///////////////////////////////////////////////////////////

 

var forEach = function(array, callback, thisObject){

if(array.forEach){

array.forEach(callback, thisObject);

}else{

for (var i = 0, len = array.length; i < len; i++) { callback.call(thisObject, array[i], i, array); }

}

}

 

var st = new SlideTrans("idContainer2", "idSlider2", 3, { Vertical: false });

 

var nums = [];

//插入數字

for(var i = 0, n = st._count - 1; i <= n;){

(nums[i] = $("idNum").appendChild(document.createElement("li"))).innerHTML = ++i;

}

 

forEach(nums, function(o, i){

o.onmouseover = function(){ o.className = "on"; st.Auto = false; st.Run(i); }

o.onmouseout = function(){ o.className = ""; st.Auto = true; st.Run(); }

})

 

//設定按鈕樣式

st.onStart = function(){

forEach(nums, function(o, i){ o.className = st.Index == i ? "on" : ""; })

}

 

$("idAuto").onclick = function(){

if(st.Auto){

st.Auto = false; st.Stop(); this.value = "自動";

}else{

st.Auto = true; st.Run(); this.value = "停止";

}

}

$("idNext").onclick = function(){ st.Next(); }

$("idPre").onclick = function(){ st.Previous(); }

 

$("idTween").onchange = function(){

switch (parseInt(this.value)){

case 2 :

st.Tween = Tween.Bounce.easeOut; break;

case 1 :

st.Tween = Tween.Back.easeOut; break;

default :

st.Tween = Tween.Quart.easeOut;

}

}

 

 

st.Run();

</script>

</body>

</html>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.