自定義vue指令,滑動(dòng)

將下面js 放在main.js引入
import touch from '@/assets/js/touch'//觸屏滑動(dòng)
Vue.use(touch);

使用
<div v-swiperight="swiperight">
...
</div>

swiperight為methods里的方法,不能傳參,傳參會(huì)報(bào)錯(cuò)

export default {
    install(Vue){
        function vueTouch(el,binding,type){//觸屏函數(shù)
            var _this=this;
            _this.obj=el;
            _this.binding=binding;
            _this.touchType=type;
            _this.vueTouches={x:0,y:0};//觸屏坐標(biāo)
            _this.vueMoves=true;
            _this.vueLeave=true;
            _this.vueCallBack=typeof(binding.value)=="object"?binding.value.fn:binding.value;
            _this.obj.addEventListener("touchstart",function(e){
                _this.start(e);
            },false);
            _this.obj.addEventListener("touchend",function(e){
                _this.end(e);
            },false);
            _this.obj.addEventListener("touchmove",function(e){
                _this.move(e);
            },false);
        };
        vueTouch.prototype={
            start:function(e){//監(jiān)聽touchstart事件
                this.vueMoves=true;
                this.vueLeave=true;
                this.longTouch=true;
                this.vueTouches={x:e.changedTouches[0].pageX,y:e.changedTouches[0].pageY};
                this.time=setTimeout(function(){
                    if(this.vueLeave&&this.vueMoves){
                        this.touchType=="longtap"&&this.vueCallBack(this.binding.value,e);
                        this.longTouch=false;
                    };
                }.bind(this),1000);
            },
            end:function(e){//監(jiān)聽touchend事件
                var disX=e.changedTouches[0].pageX-this.vueTouches.x;//計(jì)算移動(dòng)的位移差
                var disY=e.changedTouches[0].pageY-this.vueTouches.y;
                clearTimeout(this.time);
                if(Math.abs(disX)>10||Math.abs(disY)>100){//當(dāng)橫向位移大于10,縱向位移大于100序六,則判定為滑動(dòng)事件
                    this.touchType=="swipe"&&this.vueCallBack(this.binding.value,e);//若為滑動(dòng)事件則返回
                    if(Math.abs(disX)>Math.abs(disY)){//判斷是橫向滑動(dòng)還是縱向滑動(dòng)
                        if(disX>10){
                            this.touchType=="swiperight"&&this.vueCallBack(this.binding.value,e);//右滑
                        };
                        if(disX<-10){
                            this.touchType=="swipeleft"&&this.vueCallBack(this.binding.value,e);//左滑
                        };
                    }else{
                        if(disY>10){
                            this.touchType=="swipedown"&&this.vueCallBack(this.binding.value,e);//下滑
                        };
                        if(disY<-10){
                            this.touchType=="swipeup"&&this.vueCallBack(this.binding.value,e);//上滑
                        };  
                    };
                }else{
                    if(this.longTouch&&this.vueMoves){
                        this.touchType=="tap"&&this.vueCallBack(this.binding.value,e);
                        this.vueLeave=false
                    };
                };
            },
            move:function(e){//監(jiān)聽touchmove事件
                this.vueMoves=false;
            }
        };
        Vue.directive("tap",{//點(diǎn)擊事件
            bind:function(el,binding){
                new vueTouch(el,binding,"tap");
            }
        });
        Vue.directive("swipe",{//滑動(dòng)事件
            bind:function(el,binding){
                new vueTouch(el,binding,"swipe");
            }
        });
        Vue.directive("swipeleft",{//左滑事件
            bind:function(el,binding){
                new vueTouch(el,binding,"swipeleft");
            }
        });
        Vue.directive("swiperight",{//右滑事件
            bind:function(el,binding){
                new vueTouch(el,binding,"swiperight");
            }
        });
        Vue.directive("swipedown",{//下滑事件
            bind:function(el,binding){
                new vueTouch(el,binding,"swipedown");
            }
        });
        Vue.directive("swipeup",{//上滑事件
            bind:function(el,binding){
                new vueTouch(el,binding,"swipeup");
            }
        });
        Vue.directive("longtap",{//長按事件
            bind:function(el,binding){
                new vueTouch(el,binding,"longtap");
            }
        });
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市苦银,隨后出現(xiàn)的幾起案子葛碧,更是在濱河造成了極大的恐慌蒜哀,老刑警劉巖罗心,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異含思,居然都是意外死亡崎弃,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門含潘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饲做,“玉大人,你說我怎么就攤上這事遏弱∨杈” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵漱逸,是天一觀的道長泪姨。 經(jīng)常有香客問我,道長饰抒,這世上最難降的妖魔是什么肮砾? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮袋坑,結(jié)果婚禮上仗处,老公的妹妹穿的比我還像新娘。我一直安慰自己枣宫,他們只是感情好婆誓,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著也颤,像睡著了一般旷档。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上歇拆,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音范咨,去河邊找鬼故觅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛渠啊,可吹牛的內(nèi)容都是我干的输吏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼替蛉,長吁一口氣:“原來是場噩夢啊……” “哼贯溅!你這毒婦竟也來了拄氯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對情侶失蹤它浅,失蹤者是張志新(化名)和其女友劉穎译柏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姐霍,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鄙麦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了镊折。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胯府。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖恨胚,靈堂內(nèi)的尸體忽然破棺而出骂因,到底是詐尸還是另有隱情,我是刑警寧澤赃泡,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布寒波,位于F島的核電站,受9級(jí)特大地震影響急迂,放射性物質(zhì)發(fā)生泄漏影所。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一僚碎、第九天 我趴在偏房一處隱蔽的房頂上張望猴娩。 院中可真熱鬧,春花似錦勺阐、人聲如沸卷中。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蟆豫。三九已至,卻和暖如春懒闷,著一層夾襖步出監(jiān)牢的瞬間十减,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國打工愤估, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留帮辟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓玩焰,卻偏偏與公主長得像由驹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子昔园,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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

  • 33蔓榄、JS中的本地存儲(chǔ) 把一些信息存儲(chǔ)在當(dāng)前瀏覽器指定域下的某一個(gè)地方(存儲(chǔ)到物理硬盤中)1并炮、不能跨瀏覽器傳輸:在...
    萌妹撒閱讀 2,085評(píng)論 0 2
  • Vue-Music 一| 前期工作 1.項(xiàng)目初始化 npm install -g vue-cli vue init...
    noobakong閱讀 1,837評(píng)論 0 5
  • vue去哪網(wǎng)跟學(xué)筆記 記錄學(xué)習(xí)點(diǎn)滴 1. 初始化項(xiàng)目 1.1 手機(jī)顯示配適 minimum-scale=1.0,m...
    noobakong閱讀 2,261評(píng)論 0 16
  • vue-cli搭建項(xiàng)目 確保安裝了node與npm 再目標(biāo)文件夾下打開終端 執(zhí)行cnpm i vue-cli -g...
    Akiko_秋子閱讀 3,243評(píng)論 1 22
  • ## 框架和庫的區(qū)別?> 框架(framework):一套完整的軟件設(shè)計(jì)架構(gòu)和**解決方案**。> > 庫(lib...
    Rui_bdad閱讀 2,917評(píng)論 1 4