H5左滑刪除JS插件


  1 <script type="text/javascript">
  2     /**
  3       * zepto插件:向左滑動刪除動效
  4       * 使用方法:$('.itemWipe').touchWipe({itemDelete: '.item-delete'});
  5       * 參數:itemDelete  刪除按鈕的樣式名
  6       */
  7      ;
  8      (function($) {
  9        $.fn.touchWipe = function(option) {
 10          var defaults = {
 11            itemDelete: '.item-delete', //刪除元素
 12          };
 13          var opts = $.extend({}, defaults, option); //配置選項
 14          var delWidth = $(opts.itemDelete).width();
 15      
 16          var initX; //觸摸位置X
 17          var initY; //觸摸位置Y
 18          var moveX; //滑動時的位置X
 19          var moveY; //滑動時的位置Y
 20          var X = 0; //移動距離X
 21          var Y = 0; //移動距離Y
 22          var flagX = 0; //是否是左右滑動 0為初始,1為左右,2為上下,在move中設置,在end中歸零
 23          var objX = 0; //目標對象位置
 24      
 25          $(this).on('touchstart', function(event) {
 26            console.log('start..');
 27            var obj = this;
 28            initX = event.targetTouches[0].pageX;
 29            initY = event.targetTouches[0].pageY;
 30            console.log(initX + ':' + initY);
 31            objX = (obj.style.WebkitTransform.replace(/translateX\(/g, "").replace(/px\)/g, "")) * 1;
 32            console.log (objX);
 33            if (objX == 0) {
 34              $(this).on('touchmove', function(event) {
 35      
 36                // 判斷滑動方向,X軸阻止默認事件,Y軸跳出使用瀏覽器默認
 37                if (flagX == 0) {
 38                  setScrollX(event);
 39                  return;
 40                } else if (flagX == 1) {
 41                  event.preventDefault();
 42                } else {
 43                  return;
 44                }
 45      
 46                var obj = this;
 47                moveX = event.targetTouches[0].pageX;
 48                X = moveX - initX;  
 49                if (X >= 0) {
 50                  obj.style.WebkitTransform = "translateX(" + 0 + "px)";
 51                } else if (X < 0) {
 52                  var l = Math.abs(X);
 53                  obj.style.WebkitTransform = "translateX(" + -l + "px)";
 54                  if (l > delWidth) {
 55                    l = delWidth;
 56                    obj.style.WebkitTransform = "translateX(" + -l + "px)";
 57                  }
 58                }
 59              });
 60            } else if (objX < 0) {
 61              $(this).on('touchmove', function(event) {
 62      
 63                // 判斷滑動方向,X軸阻止默認事件,Y軸跳出使用瀏覽器默認
 64                if (flagX == 0) {
 65                  setScrollX(event);
 66                  return;
 67                } else if (flagX == 1) {
 68                  event.preventDefault();
 69                } else {
 70                  return;
 71                }
 72      
 73                var obj = this;
 74                moveX = event.targetTouches[0].pageX;
 75                X = moveX - initX;
 76                if (X >= 0) {
 77                  var r = -delWidth + Math.abs(X);
 78                  obj.style.WebkitTransform = "translateX(" + r + "px)";
 79                  if (r > 0) {
 80                    r = 0;
 81                    obj.style.WebkitTransform = "translateX(" + r + "px)";
 82                  }
 83                } else { //向左滑動
 84                  obj.style.WebkitTransform = "translateX(" + -delWidth + "px)";
 85                }
 86              });
 87            }
 88          })
 89      
 90          //結束時判斷,並自動滑動到底或返回
 91          $(this).on('touchend', function(event) {  
 92            var obj = this;
 93            objX = (obj.style.WebkitTransform.replace(/translateX\(/g, "").replace(/px\)/g, "")) * 1;
 94           if (objX > -delWidth / 2) {
 95             obj.style.transition = "all 0.2s";
 96             obj.style.WebkitTransform = "translateX(" + 0 + "px)";
 97             obj.style.transition = "all 0";
 98             objX = 0;
 99           } else {
100             obj.style.transition = "all 0.2s";
101             obj.style.WebkitTransform = "translateX(" + -delWidth + "px)";
102             obj.style.transition = "all 0";
103             objX = -delWidth;
104           }
105           flagX = 0;
106         })
107     
108         //設置滑動方向
109         function setScrollX(event) {   
110           moveX = event.targetTouches[0].pageX;
111           moveY = event.targetTouches[0].pageY;
112           X = moveX - initX;
113           Y = moveY - initY;
114     
115           if (Math.abs(X) > Math.abs(Y)) {
116             flagX = 1;
117           } else {
118             flagX = 2;
119           }
120           return flagX;
121         }
122     
123         //鏈式返回
124         return this;
125       };
126     
127     })(Zepto);
128 </script>

現在滑動a標簽,對是a標簽,把a標簽跟刪除按鈕分開,不然點擊刪除會觸發li的點擊事件:

效果圖:

HTML結構:

 1 <ul>
 2     <li>
 3         <a href="www.baidu.com">這是滑動內容</a>
 4         <div class="item-delete"></div>
 5     </li>
 6     <li>
 7         <a href="www.baidu.com">這是滑動內容</a>
 8         <div class="item-delete"></div>
 9     </li>
10 </ul>

其它具體樣式就不一一展示,就寫按鈕樣式:

CSS樣式:

 1 .item-delete {
 2     position: absolute;
 3     top: 0;
 4     right: -60px;
 5     background: #c93535;
 6     color: #fff;
 7     width: 60px;
 8     height: 100%;
 9     text-align: center;
10     display: inline-block;
11     line-height: 72px;
12     font-size: 12px;
13     border: 1px solid #fff;
14     z-index: 100;
15 }
16 .item-delete:before {
17     content: '刪除';
18     color: #fff;
19 }
20 .ul {
21     overflow: hidden;
22 }

最終效果可以參考:

全車品保養選擇車型效果

參考文章地址:

https://www.cnblogs.com/woodk/p/5360494.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM