1. 程式人生 > >vue移動端的左右滑動事件demo

vue移動端的左右滑動事件demo

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script src="https://unpkg.com/vue"></script>
        <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
        <meta content="telephone=no" name="format-detection">
        <style>
            *{padding: 0;margin: 0;}
            body {background: #EEEEEE;}
            .box {text-align: center;}
            .btn {
                position: relative;
                width: 70%;
                height: 40px;
                margin: 150px auto;
                border-radius: 20px;
                background: #333333;
            }
            .btn-move {
                position: absolute;
                left: 0;
                top: 0;
                width: 40px;
                height: 40px;
                border-radius: 20px;
                background: #ededed;
            }
            .tt {
                font-size: 20px;
                color: #008000;
                text-align: center;
                margin-top: 50px;
            }
        </style>
    </head>
    <body>
        <div id="box">
            <slide-release></slide-release>
        </div>

        <script type="text/x-template" id="slide">
            <div>
                <div class="btn" ref='remove'>
                    <span ref='btnImg' class="btn-move"  
                      @touchstart='touchStart' 
                      @touchmove='touchMove' 
                      @touchend='touchEnd' 
                      :style="slideEffect"
                     >
                    </span>
                </div>
                <p class="tt" v-show="isShow">你滑動成功了!</p>
            </div>


        </script>
        <script>
            Vue.component('slide-release',{
                template:'#slide',
                data:function(){
                    return {
                        isShow:false,
                        startX:0,//開始觸控的位置
                        moveX:0,//滑動時的位置
                        endX:0,//結束觸控的位置
                        disX:0,//移動距離
                        slideEffect:'',//滑動時的效果,使用v-bind:style="deleteSlider"

                    }
                },
                methods:{
                    touchStart:function(ev) {
                        ev = ev || event;
                        ev.preventDefault();
//                      console.log(ev.targetTouches);
//                      console.log(ev.changedTouches);
                        if(ev.touches.length == 1) {    //tounches類陣列,等於1時表示此時有隻有一隻手指在觸控式螢幕幕
                            this.startX = ev.touches[0].clientX; // 記錄開始位置
                        }
                    },
                    touchMove:function(ev) {
                        ev = ev || event;
                        ev.preventDefault();
                        let btnWidth = this.$refs.remove.offsetWidth;  //$refs 減少獲取dom節點的消耗
                        let btnImg = this.$refs.btnImg.offsetWidth;
                        console.log(ev.targetTouches);
                        console.log(ev.changedTouches);
                        if(ev.touches.length == 1) {
                            //滑動時距離瀏覽器左側的距離
                            this.moveX = ev.touches[0].clientX;

                            //實時的滑動的距離-起始位置=實時移動的位置
                            this.disX = this.moveX-this.startX;
                            if(this.disX<0 || this.disX == 0) {
                                this.slideEffect = 'transform:translateX(0px)';
                            }else if(this.disX>0){
                                this.slideEffect = 'transform:translateX('+this.disX+'px)';

                                // 最大也只能等於刪除按鈕寬度 
                                if(this.disX>=btnWidth) {
                                    this.slideEffect = 'transform:translateX('+(btnWidth-btnImg)+'px)';
                                }
                            }
                        }
                    },
                    touchEnd:function(ev){
                        ev = ev || event;
                        ev.preventDefault();
                        let btnWidth = this.$refs.remove.offsetWidth;
                        let btnImg = this.$refs.btnImg.offsetWidth;
//                      console.log(ev.changedTouches);
                        if(ev.changedTouches.length == 1) {
                            let endX = ev.changedTouches[0].clientX;
                            this.disX = endX-this.startX;
                            console.log(this.disX,'this.disX')
                            console.log((btnWidth/2),'btnWidth/2');
                            if(this.disX < (btnWidth/2)) {
                                this.slideEffect = 'transform:translateX(0px)';
                            }else {
                                this.slideEffect = "transform:translateX("+(btnWidth-btnImg)+ "px)";
                                //讓欄位顯示出來,或者寫你需要的邏輯
                                this.isShow = true
                            }
                        }
                    }
                }
            })
            var vm = new Vue({
                el:'#box',
            })
        </script>
    </body>
</html>

相關推薦

js移動左右滑動事件

edt efault nbsp ret rip chm width idt touchend 1 <div id="box" style="width:100%;height:100%;border:1px solid red;"></div>

vue移動左右滑動事件demo

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <s

原生JavaScript實現監聽移動上下左右滑動事件

/** * @author W.Dong * @date 2018/10/26 * @Description: 監聽觸控的方向 */ var EventUtil = { addHandler: function (element, type, handler) { if

vue 移動仿hover事件

vue2.0的移動端的touch事件 touch的開始事件是@touchstart, 移動過程是@touchmove, 結束事件是@touchend 模仿hover效果,在PC端就是滑鼠移入移出的效果,在移動端就是手指按下開始和結束的過程,上程式碼 <input class

【原創】實現一個簡單的移動左右滑動翻頁+ 點選下標翻頁 利用:HTML5+CSS+Js

//【如何做一個簡單的手機端頁面的翻頁】//第一步:建立移動端頁面內  HTML + CSS  【注】可用彈性佈局   但需要注意的是  外層盒子的定位//第二步: 思考問題  要實現怎樣的效果?//1. 手指滑動時觸發事件【左右】兩個方向  //2.點選footer部分的下

移動頁面滑動事件穿透問題及其解決方案

滑動事件穿透: 在一個可滾動的列表頁中開啟彈窗,底部的頁面理論上是不可滾動的,但是當滑動彈窗時,底部頁面會跟隨滾動,這就是所謂的頁面滾動穿透的問題。 解決方案一: 當彈窗顯示時,在父元素上新增fix類來禁用滾動;當彈窗隱藏時,移除fix類。 .fix{

JavaScript實現監聽移動上下左右滑動事件

Introduction 最近剛入坑web前端,學了一點基礎,便準備寫個簡單的2048小遊戲試試手。開發過程中發現, PC端可以直接監聽鍵盤輸入,但是移動端就不得不監聽螢幕上的滑動事件了。 現有的js庫中沒有可以直接滿足上述要求的

js案例 移動左右滑動touch+transform

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <meta name="viewport"

JavaScript+jQuery手機左右滑動事件

//左右滑動翻頁 $("#wrapper").on("touchstart", function(e) {     // 判斷預設行為是否可以被禁用     if (e.cancelable) {         // 判斷預設行為是否已經被禁用         if (!e

移動左右滑動阻止觸發上一頁下一頁操作

最近有個需求,就是非常簡單地橫向滑動。打算使用overflow-x:auto;來試驗原生滑動,但在安卓版UC下當滑到最左或者最右會 1 預設啟用UC上一頁、下一頁手勢 ,導致頁面的跳轉(原生瀏覽器無此手勢)。之前好幾個專案之前視訊有使用js處理(query: 夏洛

vue 移動鍵盤搜尋事件監聽

1、首先注意,input的type="serch" <input @keypress="searchGoods" type="serch" placeholder="搜尋商品"> 2、監聽keypress事件 (1)KeyDown、KeyUp 事件 這

js移動客戶-----取消滑動事件(親測好用)

問題 density chm 阻止默認行為 logs 高度 頭上 function 禁止滑動 現在做的響應式網站,遇到一問題: 網站頭上的側邊欄點開始,向下滑動會出現空白,於是,想到要把body禁止滑動 網上搜了很多辦法,也不好用 註意: 手指在滑動整個屏幕時,會影響瀏覽器

移動彈性滑動以及vue記錄滑動位置

我們 移除 顯示 lis 滑動 手指 oca 方式 -i -webkit-overflow-scrolling介紹 -webkit-overflow-scrolling: auto | touch; auto: 普通滾動,當手指從觸摸屏上移開,滾動立即停止 touch:滾動

vue 移動,頁面左右頁面切換效果(切換過程中會出現白屏效果,布吉島怎麼優化,後來就釋出前就棄用了)

<transition name="left"> <router-view v-if="getCms" class="Router"/> </transition> data() { names: 'left' } watch: { '$route'(to,

vue 移動,頁面左右頁面切換效果(切換過程中會出現白屏效果,布吉島怎麽優化,後來就發布前就棄用了)

names out name watch bsp etc () nsf his <transition name="left"> <router-view v-if="getCms" class="Router"/> </transition

vue移動滑動切換圖片的一個簡單思路

最近想仿一下美團app裡的榛果民宿,當做移動端的練習。github地址在這裡,還沒做完。 按照app裡的圖片切換效果想了一個簡單的實現思路,在這個基礎上做更復雜一點更炫酷一點的輪播應該也是可以的。效果如圖。 程式碼其實很簡單, <div id="slid

vue移動繫結click事件失效問題

原因可能是你使用了better-scroll,預設它會阻止touch事件。所以在配置中需要加上click: true 例: mounted(){ this.scroll=new Bscroll(this.$refs.wrapper, { mous

對於移動瀏覽器touch事件的研究總結(4)判斷手指滑動方向

最近有一些微信的專案,雖然頁面很簡單,但配合手勢後的效果卻是很不錯的。最基本的效果就是手指向上滑,頁面配合css3出現一個展開效果,手指向下滑將展開的內容按原路徑收起。其實就是一個簡單的判斷手指滑動方向讓頁面滾動一屏的高度。 先來看程式碼: ?

學習Vue.js之vue移動框架到底哪家強

outer import ati 工作 需要 全部 ctu ron 上層 官網:https://cn.vuejs.org/ Weex 2016年4月21日,阿裏巴巴在Qcon大會上宣布跨平臺移動開發工具Weex開放內測邀請。 Weex 是一套簡單易用的跨平臺開發方案

jquery touch 移動上下滑動加載

hang blog change ldl scrollto jquery scroll edt end var touchStart, touchEnd, touchDiff = 80; $(window).on({ ‘touchs