js移動(dòng)端向左滑動(dòng)出現(xiàn)刪除按鈕

最近在做移動(dòng)端項(xiàng)目時(shí)谓媒,需要實(shí)現(xiàn)一個(gè)列表頁面的每一項(xiàng)item向左滑動(dòng)時(shí)出現(xiàn)相應(yīng)的刪除按鈕句惯,本來想著直接使用zepto的touch.js插件,因?yàn)橹皩?shí)現(xiàn)相同的功能時(shí)用過這個(gè)插件拷淘,當(dāng)時(shí)還挺好用的指孤,直接使用它的swipeLeft和swipeRight方法即可,可是今天又開始做這個(gè)功能時(shí)结洼,卻發(fā)現(xiàn)這兩個(gè)方法在使用時(shí)毫無效果松忍,一點(diǎn)反應(yīng)都沒有筷厘。上網(wǎng)查資料,又下載了最新版本的zepto和touch.js酥艳,都沒有用,也不知為什么更扁?所以就棄用了這個(gè)插件赫冬。
下面是我后來實(shí)現(xiàn)后的代碼,其實(shí)就是用了原生js的touch事件膛薛,再結(jié)合觸摸點(diǎn)的坐標(biāo)來判斷左滑和右滑,

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<title>js側(cè)滑顯示刪除按鈕</title>
<style>
*{margin:0;padding:0;}
body{font-size:.14rem;}
li{list-style:none;}
i{font-style:normal;}
a{color:#393939;text-decoration:none;}
.list{overflow:hidden;margin-top:.2rem;padding-left:.3rem;border-top:1px solid #ddd;}
.list li{overflow:hidden;width:120%;border-bottom:1px solid #ddd;}
.list li a{display:block;height:.88rem;line-height:.88rem;-webkit-transition:all 0.3s linear;transition:all 0.3s linear;}
.list li i{float:right;width:15%;text-align:center;background:#E2421B;color:#fff;}
.swipeleft{transform:translateX(-15%);-webkit-transform:translateX(-15%);}
</style>
<script>
//計(jì)算根節(jié)點(diǎn)HTML的字體大小
function resizeRoot(){
    var deviceWidth = document.documentElement.clientWidth,
        num = 750,
        num1 = num / 100;
    if(deviceWidth > num){
        deviceWidth = num;  
    }
    document.documentElement.style.fontSize = deviceWidth / num1 + "px";
}
//根節(jié)點(diǎn)HTML的字體大小初始化
resizeRoot();

window.onresize = function(){
    resizeRoot();
};
</script>
</head>
<body>
<section>
<div class="list">
    <ul>
        <li><a href="#">側(cè)滑顯示刪除按鈕1<i>刪除</i></a></li>
        <li><a href="#">側(cè)滑顯示刪除按鈕2<i>刪除</i></a></li>
        <li><a href="#">側(cè)滑顯示刪除按鈕3<i>刪除</i></a></li>
    </ul>
</div>
<script>
//側(cè)滑顯示刪除按鈕
var expansion = null; //是否存在展開的list
var container = document.querySelectorAll('.list li a');
for(var i = 0; i < container.length; i++){    
    var x, y, X, Y, swipeX, swipeY;
    container[i].addEventListener('touchstart', function(event) {
        x = event.changedTouches[0].pageX;
        y = event.changedTouches[0].pageY;
        swipeX = true;
        swipeY = true ;
        if(expansion){   //判斷是否展開,如果展開則收起
            expansion.className = "";
        }        
    });
    container[i].addEventListener('touchmove', function(event){
        
        X = event.changedTouches[0].pageX;
        Y = event.changedTouches[0].pageY;        
        // 左右滑動(dòng)
        if(swipeX && Math.abs(X - x) - Math.abs(Y - y) > 0){
            // 阻止事件冒泡
            event.stopPropagation();
            if(X - x > 10){   //右滑
                event.preventDefault();
                this.className = "";    //右滑收起
            }
            if(x - X > 10){   //左滑
                event.preventDefault();
                this.className = "swipeleft";   //左滑展開
                expansion = this;
            }
            swipeY = false;
        }
        // 上下滑動(dòng)
        if(swipeY && Math.abs(X - x) - Math.abs(Y - y) < 0) {
            swipeX = false;
        }        
    });
}
</script>
</body>
</html>

zepto

function addsc(tname,naclass,naju,nafu,nazi){
      var expansion=null; 
    tname.each(function(event){
      var x, y, X, Y, swipeX, swipeY;

    //獲取每一個(gè)滑塊的滑動(dòng)距離
    $(this).on("touchstart",function(event){
       x = event.changedTouches[0].pageX;
       y = event.changedTouches[0].pageY;
       swipeX = true;
       swipeY = true;
//     console.log("x"+x+"y"+y)
       if(expansion){ 
        if($(this).is(naclass)){ $(this).removeClass(naclass); }
        else{ $(this).parents(nafu).siblings().children(nazi).removeClass(naclass); }
      }  

     })
    
    $(this).on("touchmove",function(event){
           X = event.changedTouches[0].pageX;
         Y = event.changedTouches[0].pageY;
         // 左右滑動(dòng)
         if(swipeX && Math.abs(X - x) - Math.abs(Y - y) > 0){
            event.stopPropagation();
            if(x-X> naju){  //左滑 
                event.preventDefault();
                $(this).addClass(naclass)
                expansion = true;
            }
            
            if(X-x>naju){//右滑
                event.preventDefault();
          $(this).removeClass(naclass)
          expansion = " ";
            }
              swipeY = false;
         }
         
        if(swipeY && Math.abs(X - x) - Math.abs(Y - y) < 0) {
            swipeX = false;
        }        
         
    })
    
})


 }

//調(diào)用滑動(dòng)模塊
if($(".fh701").length>0){
     $(".fh701").on("touchstart  myCrrrg ",function(event){
       addsc($(".fh628-dv .soo29-dow .soo29-daw  a"),"swipeleft",25,".soo29-daw","a");
       event.stopPropagation();
   }).triggerHandler("myCrrrg")
 
    
}


$("body").on("touchstart", function(e) {
    e.preventDefault();
    startX = e.originalEvent.changedTouches[0].pageX,
    startY = e.originalEvent.changedTouches[0].pageY;
});
$("body").on("touchmove", function(e) {
    e.preventDefault();
    moveEndX = e.originalEvent.changedTouches[0].pageX,
    moveEndY = e.originalEvent.changedTouches[0].pageY,
    X = moveEndX - startX,
    Y = moveEndY - startY;
 
    if ( X > 0 ) {
        alert("left 2 right");
    }
    else if ( X < 0 ) {
        alert("right 2 left");
    }
    else if ( Y > 0) {
        alert("top 2 bottom");
    }
    else if ( Y < 0 ) {
        alert("bottom 2 top");
    }
    else{
        alert("just touch");
    }
});

http://www.qdfuns.com/notes/18161/e2f2dc4b5f307375757fc562e4b33788.html

原文網(wǎng)址http://www.cnblogs.com/tnnyang/p/6429730.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锌半,一起剝皮案震驚了整個(gè)濱河市寇漫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌记焊,老刑警劉巖栓撞,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捌归,居然都是意外死亡岭粤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門巾兆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虎囚,“玉大人,你說我怎么就攤上這事圃伶。” “怎么了搀罢?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵侥猩,是天一觀的道長。 經(jīng)常有香客問我唧取,道長枫弟,這世上最難降的妖魔是什么鹏往? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮袜漩,結(jié)果婚禮上湾碎,老公的妹妹穿的比我還像新娘介褥。我一直安慰自己柔滔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布形真。 她就那樣靜靜地躺著超全,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嘶朱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天脉课,我揣著相機(jī)與錄音,去河邊找鬼唱遭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛胆萧,可吹牛的內(nèi)容都是我干的庆揩。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼虏辫,長吁一口氣:“原來是場噩夢啊……” “哼锈拨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起娄昆,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤萌焰,失蹤者是張志新(化名)和其女友劉穎谷浅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撼玄,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掌猛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年眉睹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兔院。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坊萝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出菩鲜,到底是詐尸還是另有隱情惦积,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布蛛勉,位于F島的核電站诽凌,受9級(jí)特大地震影響坦敌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜狱窘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一蘸炸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧幻馁,春花似錦、人聲如沸膘滨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铲咨。三九已至蜓洪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間摇天,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國打工为鳄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留腕让,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓偏形,卻偏偏與公主長得像壳猜,于是被迫代替她去往敵國和親滑凉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子喘帚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,324評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫若未、插件倾鲫、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,124評(píng)論 4 61