最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS組件庫AlloyTouch實現(xiàn)圖片輪播過程解析

 更新時間:2020年05月29日 10:50:18   作者:javascript癡癡  
這篇文章主要介紹了JS組件庫AlloyTouch實現(xiàn)圖片輪播組件過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

輪播圖也涉及到觸摸和觸摸反饋,同時,AlloyTouch可以把慣性運動打開或者關(guān)閉,并且設置min和max為運動區(qū)域,超出會自動回彈。

除了一般的豎向滾動,AlloyTouch也可以支持橫向滾動,甚至任何屬性的運動,因為它的設計的本質(zhì)就是屬性無關(guān),觸摸可以反饋到任何屬性的運動。所以AlloyTouch制作各種各樣的輪播組件還是得心應手。

第一種輪播圖如上圖所示。下面開始實現(xiàn)的過程。

第0秒

<div id="carousel-container">
 <div class="carousel">
  <div class="carousel-scroller" id="carousel-scroller">
   <img style="width: 88%;" src="asset/ci1.jpg">
   <img style="width: 88%;" src="asset/ci2.jpg">
   <img style="width: 88%;" src="asset/ci3.jpg">
   <img style="width: 88%;" src="asset/ci4.jpg">
   <img style="width: 88%;" src="asset/ci5.jpg">
  </div>

 </div>
</div>

一共五張圖,每張圖占有屏幕比例的百分之88,所以用戶的屏幕里可以看到一張多一點的圖片,給用戶可以橫向滑動查看的感覺。

第10秒

<script src="../transformjs/transform.js"></script>
<script src="../alloy_touch.js"></script>
<script>
 var scroller = document.querySelector("#carousel-scroller");
 Transform(scroller); 
</script>

通過Transform(scroller); 注入CSS3 transform屬性。

第20秒

new AlloyTouch({
 touch: "#carousel-container",//反饋觸摸的dom
 vertical: false,// 監(jiān)聽用戶橫向觸摸
 target: scroller, //運動的對象
 property: "translateX", //被運動的屬性
 min:0.88 * window.innerWidth * -5 + window.innerWidth, 
 max: 0
})

這里最大的難點(其實也沒有什么難的),就是就是min的值。因為初始值是0,所有向左邊滑動一定是負值??梢缘玫絤ax一定是0。

那么min的值就是: 屏幕的寬度-圖片的張數(shù)*圖片的寬度

  • 圖片的寬度為0.88 * window.innerWidth
  • 屏幕的寬度為window.innerWidth
  • 圖片的張數(shù)為 5

第30秒

如上圖所示,相對于傳統(tǒng)的swipe然后再去觸發(fā)滾動,上面的跟手然后再去校正的體驗是更加良好的。那么怎么實現(xiàn)呢?
首先,AlloyTouch是支持step配置。

new AlloyTouch({
step: 100,
...
...
...
})

只要用戶設置的step,最后運動結(jié)束之后,AlloyTouch都會幫用戶校正到最接近的step的整數(shù)倍的位置。

比如上面是100:

  • 如果運動的對象停在 120,會被校正到100
  • 如果運動的對象停在 151,會被校正到200
  • 如果運動的對象停在 281,會被校正到300
  • 如果運動的對象停在 21,會被校正到0

第40秒

當然這有個問題,比如用戶從0滑倒30,其實他是想去100,但是會被校正到0!!!

所以光使用校正是不夠。還需要一個API去阻止校正自己去注入邏輯滾動相應的位置。所以你必須支持AlloyTouch的:

to 方法

to(v [, time, easing])

其中time和easing不是必須。time的默認值是600.

第50秒

var items = document.querySelectorAll("#nav a");
var scroller = document.querySelector("#carousel-scroller");
Transform(scroller);
new AlloyTouch({
 touch: "#carousel-container",//反饋觸摸的dom
 vertical: false,//不必需,默認是true代表監(jiān)聽豎直方向touch
 target: scroller, //運動的對象
 property: "translateX", //被運動的屬性
 min: window.innerWidth * -3, //不必需,運動屬性的最小值
 max: 0, //不必需,滾動屬性的最大值
 step: window.innerWidth,
 inertia: false, //不必需,是否有慣性。默認是true
 touchEnd: function (evt, v, index) {

  var step_v = index * this.step * -1;
  var dx = v - step_v;

  if (v < this.min) {
   this.to(this.min);
  } else if (v > this.max) {
   this.to(this.max);
  } else if (Math.abs(dx) < 30) {
   this.to(step_v);
  }
  else if (dx > 0) {
   this.to(step_v + this.step);
  } else {
   this.to(step_v - this.step);
  }

  return false;
 },
 animationEnd: function (evt , v) {
  var i = 0,
   len = items.length;
  for (; i < len; i++) {
   if (i === this.currentPage) {
    items[i].classList.add("active");
   } else {
    items[i].classList.remove("active");
   }
  }

 }
})

因為一共四張圖,所以
min得到的結(jié)果是 window.innerWidth * -3
max的值依然是0
step的值是 window.innerWidth
通過設置 inertia: false,把慣性運動關(guān)掉
注意看touchEnd里面的return false是為了不去計算手指離開屏幕后的校正位置、慣性運動等邏輯。
touchEnd可以拿到當前的位置v以及當前所處的位置index。
animationEnd是運動結(jié)束后的回調(diào),用來設置nav的active。當然不是所有瀏覽器都支持classList,這里只是為了演示代碼足夠簡潔。
再注意,在touchEnd和animationEnd中能拿到this,也就是AlloyTouch當前對象的實例。其中,
to方法用來運動當前對象
step是當前的步長
還可以拿到currentPage去獲取當前所處的頁碼
還能拿到min和max值,得到運動的區(qū)間。

最后

所有例子演示和代碼可以在Github上找到。

Github:https://github.com/AlloyTeam/AlloyTouch

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)提交input信息到后臺的方法示例

    微信小程序?qū)崿F(xiàn)提交input信息到后臺的方法示例

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)提交input信息到后臺的方法,結(jié)合實例形式分析了微信小程序提交input信息到后臺相關(guān)事件響應與數(shù)據(jù)處理操作技巧,需要的朋友可以參考下
    2019-01-01
  • JS內(nèi)部事件機制之單線程原理

    JS內(nèi)部事件機制之單線程原理

    這篇文章主要介紹了JS內(nèi)部事件機制之單線程原理,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • bootstrap按鈕插件(Button)使用方法解析

    bootstrap按鈕插件(Button)使用方法解析

    這篇文章主要為大家詳細解析了bootstrap按鈕插件Button使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Bootstrap 3 進度條的實現(xiàn)

    Bootstrap 3 進度條的實現(xiàn)

    這篇文章主要介紹了Bootstrap 3 進度條的實現(xiàn),非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • 我所理解的JavaScript中的this指向

    我所理解的JavaScript中的this指向

    這篇文章主要介紹了JavaScript中this指向的相關(guān)資料,幫助大家更好的理解和學習JavaScript,感興趣的朋友可以了解下
    2020-09-09
  • js與css的阻塞問題詳析

    js與css的阻塞問題詳析

    JS具有阻塞特性,當瀏覽器在執(zhí)行js代碼時,不能同時做其它事情,下面這篇文章主要給大家介紹了關(guān)于js與css阻塞問題的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • js如何將多個json結(jié)構(gòu)組成的字符串轉(zhuǎn)換為數(shù)組?

    js如何將多個json結(jié)構(gòu)組成的字符串轉(zhuǎn)換為數(shù)組?

    接口返回的EventStream結(jié)構(gòu)的數(shù)據(jù),由于http流式傳輸時,可能會分段,所以導致本該每次返回一段json數(shù)據(jù)結(jié)構(gòu)的字符串,變成了多個json數(shù)據(jù)結(jié)構(gòu)的字符串拼接在了一起,本文講述js如何將多個json結(jié)構(gòu)組成的字符串轉(zhuǎn)換為數(shù)組
    2024-08-08
  • JS中關(guān)于filter()方法的使用及說明

    JS中關(guān)于filter()方法的使用及說明

    這篇文章主要介紹了JS中關(guān)于filter()方法的使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 詳解JavaScript中浮點數(shù)的精度計算

    詳解JavaScript中浮點數(shù)的精度計算

    這篇文章主要來和大家介紹一下JavaScript中浮點數(shù)精度計算的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-06-06
  • Next.js預期錯誤與未捕獲異常的處理方法

    Next.js預期錯誤與未捕獲異常的處理方法

    在開發(fā)過程中,錯誤是不可避免的,如何優(yōu)雅地處理這些錯誤是提升應用穩(wěn)定性與用戶體驗的關(guān)鍵,本文將詳細介紹如何在 Next.js 中處理預期錯誤與未捕獲的異常,包括使用 useFormState 處理預期錯誤,使用錯誤邊界捕獲未捕獲的異常,需要的朋友可以參考下
    2025-03-03

最新評論

仙桃市| 肇东市| 玉林市| 雷山县| 邓州市| 南充市| 盐池县| 安仁县| 长武县| 德清县| 新田县| 古浪县| 宁陕县| 淮北市| 都昌县| 鄂温| 太谷县| 镇平县| 晋州市| 安仁县| 永城市| 买车| 玉门市| 新巴尔虎左旗| 龙州县| 林芝县| 珠海市| 荥阳市| 满洲里市| 大田县| 和硕县| 枝江市| 宿州市| 阳城县| 灵台县| 红河县| 南华县| 两当县| 千阳县| 汝城县| 青浦区|