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 }
最終效果可以參考:
參考文章地址: