中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用vue怎么實現左右滑動效果

發布時間:2021-05-24 15:50:11 來源:億速云 閱讀:1324 作者:Leah 欄目:開發技術

使用vue怎么實現左右滑動效果?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

HTML代碼

<template>
    <div id="SlideBar" class="box">
        <div class="item" ref="slide" : @touchstart="start($event)" @touchmove="move($event)" @touchend="end($event)">
          <img src="http://img2.imgtn.bdimg.com/it/u=2555191195,2735808065&fm=26&gp=0.jpg" alt="">
          <div class="right">
            <div class="title">你好!</div>
            <p class="text">哈哈哈</p>
            <p class="price">好不</p>
          </div>
        </div>
        <div class="btn" ref="btn">
            <button>編輯</button>
            <button >收藏</button>
        </div>
    </div>
</template>

CSS代碼

<style>
.box{
    position:relative;
    border-bottom:0.026667rem solid #666666;
}
.btn{
  height:100%;
  position:absolute;
  right:0;
  top:0;
  background:red;
  display:flex;
}
button{
  width:1.6rem;
  height:100%;
  background:#f8f8f8;
  border:none;
}
.item{
  padding:0.266667rem;
  display:flex;
  position:relative;
  background:#fff;
  z-index: 2;
  box-shadow: 0.026667rem 0 0.053333rem #ddd;
}
.item img{
  width:2.133333rem;
  height:2.133333rem;
  margin-right:0.4rem;
  border-radius: 0.133333rem;
}

.item .title{
  font-size:0.48rem;
  float: left;
}
.item .text{
  font-size:0.426667rem;
  color:#888;
  float: left;
  margin: 0 1.33rem;
}
.item .price{
  color:#888;
  float: left;
  margin: 0 1.33rem;
}
</style>

JS代碼

<script>
    export default {
        name: 'SlideBar',
        props: {

        },
        data (){
            return {
                flag: false,
                startX: 0,
                endX: 0,
                slideStyle: {
                    left: 0,
                    transition: 'none'
                }
            }
        },
        methods: {
            start (e){  //記錄開始滑動屏幕的X軸的位置
                this.flag = true;
                this.startX = e.touches[0].clientX;
                this.endX = this.$refs.slide.offsetLeft;
                this.slideStyle.transition = 'none';
            },
            move (e){
                if(this.flag){
                    // 處理鼠標移動的邏輯
                    var moveX = this.endX + (e.touches[0].clientX - this.startX);  //計算滑動的距離
                    if(Math.abs(moveX) >= this.$refs.btn.offsetWidth && moveX < 0){  //判斷滑動的距離是否大于class:btn的寬度
                        moveX = (Math.abs(moveX) - this.$refs.btn.offsetWidth) * 0.1; // 0.3阻力系數
                        this.slideStyle.left = - this.$refs.btn.offsetWidth - moveX + 'px';
                    }else if(moveX >= 0){  //滑動距離是否大于等于0
                        this.slideStyle.left = 0 + 'px';  //大于等于0讓class:item等于0
                    }else{
                        this.slideStyle.left = moveX + 'px';  //小于0讓class:item等于滑動的距離
                    }
                }
            },
            end (e){
                if(this.flag){
                    this.flag = false;
                    // endX = slide.offsetLeft;
                    var moveX = e.changedTouches[0].clientX - this.startX;  //計算滑動的距離
                    this.slideStyle.transition = 'left .3s';
                    var btnWidth = this.$refs.btn.offsetWidth;  //class:btn的寬度
                    if(moveX < 0){
                        if(Math.abs(moveX) >= btnWidth / 2 || Math.abs(this.$refs.slide.offsetLeft) >= this.$refs.btn.offsetWidth){ //是否大于class:btn寬度的一半
                            this.slideStyle.left = - btnWidth + 'px';  //左滑超過class:btn寬度的一半就滑回去
                        }else if(Math.abs(moveX) < btnWidth / 2){  //小于class:btn寬度的一半
                            this.slideStyle.left = 0 + 'px';  //左滑沒有超過class:btn寬度的一半回原位
                        }
                    }else if(moveX > 0 && this.endX != 0){
                        if(Math.abs(moveX) >= btnWidth / 2){
                            this.slideStyle.left = 0 + 'px';  //右滑超過class:btn寬度的一半就滑回去
                        }else if(Math.abs(moveX) < btnWidth / 2){
                            this.slideStyle.left = - btnWidth + 'px';  //右滑沒有超過class:btn寬度的一半回原位
                        }
                    }
                }
            }
        },
        mounted (){
            var _this = this;
            // 使用js的現代事件監聽transition過渡結束
            this.$refs.slide.addEventListener('transitionend',function(){
                _this.endX = this.offsetLeft;
            })
        }
    }
</script>

Vue的優點

Vue具體輕量級框架、簡單易學、雙向數據綁定、組件化、數據和結構的分離、虛擬DOM、運行速度快等優勢,Vue中頁面使用的是局部刷新,不用每次跳轉頁面都要請求所有數據和dom,可以大大提升訪問速度和用戶體驗。

關于使用vue怎么實現左右滑動效果問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

房山区| 广德县| 洞口县| 吉林省| 万荣县| 乐至县| 泗水县| 新源县| 蒙城县| 白沙| 双辽市| 鄂托克旗| 贵南县| 六盘水市| 青铜峡市| 芮城县| 城固县| 綦江县| 东乡县| 民勤县| 洛宁县| 广西| 石城县| 迁安市| 大兴区| 海晏县| 大邑县| 集贤县| 三原县| 扎赉特旗| 榆林市| 奉贤区| 乐陵市| 利川市| 新源县| 介休市| 柘城县| 都匀市| 简阳市| 崇左市| 宜都市|