<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      一分鐘搞定AlloyTouch圖片輪播組件

      2016-12-09 12:54  【當(dāng)耐特】  閱讀(1975)  評(píng)論(2)    收藏  舉報(bào)

      輪播圖也涉及到觸摸和觸摸反饋,同時(shí),AlloyTouch可以把慣性運(yùn)動(dòng)打開或者關(guān)閉,并且設(shè)置min和max為運(yùn)動(dòng)區(qū)域,超出會(huì)自動(dòng)回彈。
      除了一般的豎向滾動(dòng),AlloyTouch也可以支持橫向滾動(dòng),甚至任何屬性的運(yùn)動(dòng),因?yàn)樗脑O(shè)計(jì)的本質(zhì)就是屬性無關(guān),觸摸可以反饋到任何屬性的運(yùn)動(dòng)。所以AlloyTouch制作各種各樣的輪播組件還是得心應(yīng)手。

      第一種輪播圖如上圖所示。下面開始實(shí)現(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,所以用戶的屏幕里可以看到一張多一點(diǎn)的圖片,給用戶可以橫向滑動(dòng)查看的感覺。

      第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, //運(yùn)動(dòng)的對(duì)象
          property: "translateX",  //被運(yùn)動(dòng)的屬性
          min:0.88 * window.innerWidth * -5 + window.innerWidth, 
          max: 0
      })
      

      這里最大的難點(diǎn)(其實(shí)也沒有什么難的),就是就是min的值。因?yàn)槌跏贾凳?,所有向左邊滑動(dòng)一定是負(fù)值。可以得到max一定是0。
      那么min的值就是: 屏幕的寬度-圖片的張數(shù)*圖片的寬度

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

      第30秒

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

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

      只要用戶設(shè)置的step,最后運(yùn)動(dòng)結(jié)束之后,AlloyTouch都會(huì)幫用戶校正到最接近的step的整數(shù)倍的位置。
      比如上面是100:

      • 如果運(yùn)動(dòng)的對(duì)象停在 120,會(huì)被校正到100
      • 如果運(yùn)動(dòng)的對(duì)象停在 151,會(huì)被校正到200
      • 如果運(yùn)動(dòng)的對(duì)象停在 281,會(huì)被校正到300
      • 如果運(yùn)動(dòng)的對(duì)象停在 21,會(huì)被校正到0

      第40秒

      當(dāng)然這有個(gè)問題,比如用戶從0滑倒30,其實(shí)他是想去100,但是會(huì)被校正到0!!!
      所以光使用校正是不夠。還需要一個(gè)API去阻止校正自己去注入邏輯滾動(dòng)相應(yīng)的位置。所以你必須支持AlloyTouch的:

      to 方法

        to(v [, time, easing]) 
      

      其中time和easing不是必須。time的默認(rèn)值是600.

      第50秒

      var items = document.querySelectorAll("#nav a");
      var scroller = document.querySelector("#carousel-scroller");
      Transform(scroller);
      new AlloyTouch({
          touch: "#carousel-container",//反饋觸摸的dom
          vertical: false,//不必需,默認(rèn)是true代表監(jiān)聽豎直方向touch
          target: scroller, //運(yùn)動(dòng)的對(duì)象
          property: "translateX",  //被運(yùn)動(dòng)的屬性
          min: window.innerWidth * -3, //不必需,運(yùn)動(dòng)屬性的最小值
          max: 0, //不必需,滾動(dòng)屬性的最大值
          step: window.innerWidth,
          inertia: false, //不必需,是否有慣性。默認(rèn)是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");
                  }
              }
      
          }
      })
      

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

      最后

      所有例子演示和代碼可以在Github上找到。
      Github:https://github.com/AlloyTeam/AlloyTouch

      主站蜘蛛池模板: 91九色国产成人久久精品| 亚洲精品综合久中文字幕| 涿鹿县| 色吊丝中文字幕在线观看| 成人亚欧欧美激情在线观看| 亚洲欧美中文字幕日韩一区二区| 国产激情文学亚洲区综合| 午夜色无码大片在线观看免费| 色悠悠国产精品免费观看| 亚洲一区二区三区18禁| 九九热久久只有精品2| 施甸县| 福利一区二区在线观看| 亚洲av专区一区| 高清国产美女一级a毛片在线| 天天燥日日燥| 熟妇人妻一区二区三区四区| 高潮精品熟妇一区二区三区| 欧美日韩精品一区二区视频| 亚洲精品动漫免费二区| 亚洲中文无码永久免费| 久久国产一区二区三区| 国产精品偷乱一区二区三区| 一边捏奶头一边高潮视频| 中文字幕av无码免费一区| 国产一区精品综亚洲av| 欧洲码亚洲码的区别入口| 亚洲午夜无码久久久久蜜臀av| 欧美性猛交xxxx乱大交丰满| 国产av一区二区不卡| 亚洲天堂av在线免费看| 97久久精品无码一区二区| 阿勒泰市| 国产日韩久久免费影院| 无码成人午夜在线观看| 免费无码肉片在线观看| 国产中文三级全黄| 成人精品天堂一区二区三区| 国产稚嫩高中生呻吟激情在线视频| 宅男噜噜噜66在线观看| 激情综合色综合啪啪开心|