您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關vue 和vue-touch怎么實現(xiàn)移動端左右導航效果,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
先給大家展示下效果圖,感覺還不錯請參考實現(xiàn)代碼:
使用技術:vue2.0 webpack vue-touch 一些簡單的javascript;
(注意:vue-touch 使用的是2.0.0版本 需要與vue2.0.0兼容)
vue-touch(地址:https://github.com/vuejs/vue-touch 注意是next 分支)
左側導航可滑動(右側視圖窗因為和左邏輯一樣 就沒寫)
var VueTouch = require('vue-touch') Lib.Vue.use(VueTouch, {name: 'v-touch'})
通過npm 安裝后vuetouch 后引入
我這里Lib,是我的一個方法 你也可以 直接Vue.use()引用
{name:'v-touch'}
的作用 聲明一個以vue-touch的標簽
然后 在html內寫一個 <vue-touch></vue-touch>
就可以,當然后面我們要寫入方法;
附:vue-touch方法
因為vue-touch其實封裝了 hammer.js的方法 其實我們這里介紹的也就是他幾個事件;詳情可以搜索 hammer.js的文檔;
hammer.js主要針對觸屏的6大事件進行監(jiān)聽。如下圖所示:
1、 Pan事件:在指定的dom區(qū)域內,一個手指放下并移動事件,即觸屏中的拖動事件。這個事件在屏觸開發(fā)中比較常用,如:左拖動、右拖動等,如手要上使用QQ時向右滑動出現(xiàn)功能菜單的效果。該事件還可以分別對以下事件進行監(jiān)聽并處理:
Panstart:拖動開始、Panmove:拖動過程、Panend:拖動結束、Pancancel:拖動取消、Panleft:向左拖動、Panright:向右拖動、Panup:向上拖動、Pandown:向下拖動
2、 Pinch事件:在指定的dom區(qū)域內,兩個手指(默認為兩個手指,多指觸控需要單獨設置)或多個手指相對(越來越近)移動或相向(越來越遠)移動時事件。該事件事以分別對以下事件進行監(jiān)聽并處理:
Pinchstart:多點觸控開始、Pinchmove:多點觸控過程、Pinchend:多點觸控結束、Pinchcancel:多點觸控取消、Pinchin:多點觸控時兩手指距離越來越近、Pinchout:多點觸控時兩手指距離越來越遠
3、 Press事件:在指定的dom區(qū)域內觸屏版本的點擊事件,這個事件相當于PC端的Click事件,該不能包含任何的移動,最小按壓時間為500毫秒,常用于我們在手機上用的“復制、粘貼”等功能。該事件分別對以下事件進行監(jiān)聽并處理:
Pressup:點擊事件離開時觸發(fā)
4、 Rotate事件:在指定的dom區(qū)域內,當兩個手指或更多手指成圓型旋轉時觸發(fā)(就像兩個手指擰螺絲一樣)。該事件分別對以下事件進行監(jiān)聽并處理:
Rotatestart:旋轉開始、Rotatemove:旋轉過程、Rotateend:旋轉結束、Rotatecancel:旋轉取消
5、 Swipe事件:在指定的dom區(qū)域內,一個手指快速的在觸屏上滑動。即我們平時用到最多的滑動事件。
Swipeleft:向左滑動、Swiperight:向右滑動、Swipeup:向上滑動、Swipedown:向下滑動
6、Tap事件:在指定的dom區(qū)域內,一個手指輕拍或點擊時觸發(fā)該事件(類似PC端的click)。該事件最大點擊時間為250毫秒,如果超過250毫秒則按Press事件進行處理。
(以上作者毫無節(jié)奏的摘抄一下,其實我也是費好大勁搜索的呀)
這里注意swipe這個方法;我們不需要因為這個滑動和我們需要的滑動是不一樣的;
Panstart 是我們需要的;
展示一下 div 代碼層;
<v-touch class="ul" v-on:pandown="onPanStart" //向下滑動 v-on:panmove="onPanmove" //滑動結束 v-on:panup="onPandup"> //向上滑動 </v-touch>
注意:也可以進行 事件的限制 用戶多長時間可以執(zhí)行
//我沒用到這句 v-bind:pan-options="{ direction: 'panup', threshold: 100 }">
首先定一個 公共變量
//省去一些 代碼 var lefthe = 0; //檢測滑動的位置 onPanStart:function(data) { this.positionjson.transition='' console.log(data) var y = data.deltaY; //事件執(zhí)行 所滑動的距離 lefthe = y + this.lefthe; //滑動的距離 記錄到 lefthe 方便下次執(zhí)行 console.log(lefthe) if(lefthe >=50) { //限制 不能一直往上拉 拉到宇宙呢?我這里是寫死的 lefthe = 0; //回彈效果 在 滑動結束后 執(zhí)行 return }else{ } this.positionjson.top = lefthe +'px'; },
滑動結束 事件
onPanend:function(data) { if(lefthe ==0) { console.log('現(xiàn)在是0') this.positionjson.top = lefthe +'px'; //滑動結束 執(zhí)行 一些事件 lefthe 0 的時候其實也就是下拉到頂?shù)倪^程 this.positionjson.transition='0.2s ease 0s' }else{ } this.lefthe = lefthe; }, //上拉代碼塊 onPandup:function(data) { var domul =document.getElementById('domul'); this.positionjson.transition='' var y = data.deltaY; //下拉的距離 var boxheight = this.boxheight; //視圖高度 也就是分辨率 var liheight = document.getElementById('libox').clientHeight; //左側每個li的高度 console.log(liheight+'元素的高') var zongheight = this.navapi.list.length * 70; //就能得出li父盒子高度 var bottomheight = -(zongheight - boxheight) + -100; //計算下拉到 滑動盒子的高度 - 視圖高度 =上拉到底的位置 if(lefthe <= bottomheight) { // console.log('到底啦啦啦啦啦') return; }else{} lefthe = y + this.lefthe; this.positionjson.top = lefthe +'px'; },
Vue是一款友好的、多用途且高性能的JavaScript框架,使用vue可以創(chuàng)建可維護性和可測試性更強的代碼庫,Vue允許可以將一個網(wǎng)頁分割成可復用的組件,每個組件都包含屬于自己的HTML、CSS、JavaScript,以用來渲染網(wǎng)頁中相應的地方,所以越來越多的前端開發(fā)者使用vue。
關于“vue 和vue-touch怎么實現(xiàn)移動端左右導航效果”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。