国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

JS特效詳解:圖片幻燈片切換

2024-09-06 12:41:00
字體:
供稿:網(wǎng)友
  • 序一(08/07/06)
    看到 alibaba 的一個圖片切換效果,感覺不錯,想拿來用用。但代碼一大堆的,看著昏,還是自己來吧。
    由于有了做 圖片滑動展示效果 的經(jīng)驗,做這個就容易得多了。
  • 序二(09/03/19)
    自寫了 tween緩動 之后就很想重新寫過這個效果,近來有點時間,終于可以動手了。
    除了改成tween緩動,也改進(jìn)了程序算法,不過原理還是一樣的。

效果預(yù)覽:

運行代碼框

[ctrl+a 全部選擇 提示:你可先修改部分代碼,再按運行]

程序說明

原理就是通過不斷設(shè)置滑動對象的left(水平切換)和top(垂直切換)來實現(xiàn)圖片切換的動態(tài)效果。

首先需要一個容器,程序會自動設(shè)置容器overflow為hidden,如果不是相對或絕對定位會同時設(shè)置position為relative,
滑動對象會設(shè)置為絕對定位:

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";

如果沒有設(shè)置change切換參數(shù)屬性,會自動根據(jù)滑動對象獲?。?

this.change = this.options.change ? this.options.change :
    this._slider[bvertical ? "offsetheight" : "offsetwidth"] / this._count;

執(zhí)行run方法就會開始進(jìn)入切換,其中有一個可選參數(shù)用來重新設(shè)置要切換的圖片索引:

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

之后就到設(shè)置使用 tween緩動 時需要的參數(shù)了,
包括_target(目標(biāo)值)、_t(時間)、_b(初始值)和_c(變化量):

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;

還有duration(持續(xù)時間)是自定義屬性。

參數(shù)設(shè)置好后就執(zhí)行move程序開始移動了。
里面很簡單,首先判斷_c是否有值(等于0表示不需要移動)和_t是否到達(dá)duration,
未滿足條件就繼續(xù)移動,否則直接移動到目標(biāo)值并進(jìn)行下一次切換:

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));
}

|||

 

使用說明

實例化需要3個參數(shù),分別是容器對象,滑動對象和切換數(shù)量,之后可以直接執(zhí)行run方法運行:

new slidetrans("idcontainer", "idslider", 3).run();

還有以下可選屬性:

  • vertical: true,//是否垂直方向(方向不能改)
  • auto:  true,//是否自動
  • change:  0,//改變量
  • duration: 50,//滑動持續(xù)時間
  • time:  10,//滑動延時
  • pause:  2000,//停頓時間(auto為true時有效)
  • onstart: function(){},//開始轉(zhuǎn)換時執(zhí)行
  • onfinish: function(){},//完成轉(zhuǎn)換時執(zhí)行
  • tween:  tween.quart.easeout//tween算子

其中vertical初始化后就不能修改,tween算子可參照這里的緩動效果選擇(實例中選了其中3個)。

還有提供了以下方法:

  • next: 切換下一個
  • previous: 切換上一個
  • stop: 停止自動切換
  • 還有上面說到的run

程序代碼

代碼拷貝框

[ctrl+a 全部選擇 然后拷貝]

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 昌吉市| 静海县| 乌兰察布市| 湾仔区| 武鸣县| 尼勒克县| 额敏县| 宁夏| 神池县| 建昌县| 德保县| 迁安市| 鹤壁市| 静安区| 南开区| 花垣县| 大渡口区| 富蕴县| 广河县| 洪洞县| 台北县| 旬阳县| 邳州市| 涿鹿县| 会泽县| 吉首市| 双鸭山市| 历史| 呼图壁县| 抚顺县| 左贡县| 广宁县| 太和县| 应城市| 洛浦县| 东海县| 凌源市| 通山县| 周至县| 德格县| 平原县|