亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue實現(xiàn)左右滑動效果實例代碼

 更新時間:2021年05月23日 10:52:04   作者:迷小落  
左右滾動的效果,在日常開發(fā)中比較常見,這篇文章主要給大家介紹了關于vue實現(xiàn)左右滑動效果的相關資料,需要的朋友可以參考下

前言

個人實際開發(fā)中用到的效果問題總結出來便于自己以后開發(fā)查看調用,如果也適用其他人請隨意拿走勿噴就行!

vue.js是現(xiàn)在流行的js框架之一,vue 是一套用于構建用戶界面的漸進式javascript框架,與其它大型框架不同的是:vue被設計為可以自底向上逐層應用。vue的核心庫只關注視圖層,不僅易于上手,還便于與第三方庫或既有項目整合,另外一個方面,當vue與現(xiàn)代化的工具鏈以及各種支持類庫結合使用時,vue也完全能夠為復雜的單頁應用提供驅動。

vue.js是用于構建交互式的Web界面的庫,它提供MVVM數(shù)據綁定和一個可組合的組件系統(tǒng),具有簡單、靈活的API。從技術上講,vue.js集中在MVVM模式上的視圖模型層(viewModel),并通過雙向數(shù)據綁定連接視圖(view) 和模型(model)。實際的DOM操作和輸出格式被抽象出來成指令和過濾器。相比其他的MVVM框架,vue.js更容易上手,它讓你通過簡單而靈活的API創(chuàng)建由數(shù)據驅動的UI組件。

實例代碼

HTML代碼

<template>
    <div id="SlideBar" class="box">
        <div class="item" ref="slide" :style="slideStyle" @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 style="background:#387ef5;color:#fff">收藏</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阻力系數(shù)
                        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的現(xiàn)代事件監(jiān)聽transition過渡結束
            this.$refs.slide.addEventListener('transitionend',function(){
                _this.endX = this.offsetLeft;
            })
        }
    }
</script>

總結

到此這篇關于vue實現(xiàn)左右滑動效果的文章就介紹到這了,更多相關vue左右滑動內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue入口文件index.html緩存的問題及解決

    Vue入口文件index.html緩存的問題及解決

    這篇文章主要介紹了Vue入口文件index.html緩存的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Vue設置長時間未操作登錄自動到期返回登錄頁

    Vue設置長時間未操作登錄自動到期返回登錄頁

    這篇文章主要介紹了Vue設置長時間未操作登錄以后自動到期返回登錄頁,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2020-01-01
  • VUE中使用Vue-resource完成交互

    VUE中使用Vue-resource完成交互

    本篇文章主要介紹了VUE中使用Vue-resource完成交互,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Vue雙向數(shù)據綁定(MVVM)的原理

    Vue雙向數(shù)據綁定(MVVM)的原理

    這篇文章主要介紹了Vue雙向數(shù)據綁定的原理,幫助大家更好的理解和學習vue,感興趣的朋友可以了解下
    2020-10-10
  • vue之this.$router.push頁面刷新問題

    vue之this.$router.push頁面刷新問題

    這篇文章主要介紹了vue之this.$router.push頁面刷新問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • vue進入頁面加載數(shù)據緩慢實現(xiàn)loading提示過程

    vue進入頁面加載數(shù)據緩慢實現(xiàn)loading提示過程

    這篇文章主要介紹了vue進入頁面加載數(shù)據緩慢實現(xiàn)loading提示過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vuex-persist 使用場景分析

    vuex-persist 使用場景分析

    Vuex-Persist 是一個用于在 Vuex 中實現(xiàn)持久化狀態(tài)的庫,它可以用來解決應用程序在刷新瀏覽器或關閉頁面后丟失 Vuex store 中狀態(tài)的問題,本文給大家介紹vuex-persist 可以用來干什么,感興趣的朋友一起看看吧
    2023-11-11
  • 動態(tài)加載權限管理模塊中的Vue組件

    動態(tài)加載權限管理模塊中的Vue組件

    本篇文章給大家詳細講解了如何在權限管理模塊中動態(tài)的加載VUE組件的過程,有這方面需求的朋友跟著學習下吧。
    2018-01-01
  • 如何解決npm i下載依賴的時候出現(xiàn)某依賴版本沖突

    如何解決npm i下載依賴的時候出現(xiàn)某依賴版本沖突

    這篇文章主要介紹了如何解決npm i 下載依賴的時候出現(xiàn)某依賴版本沖突問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue2.0使用v-for循環(huán)制作多級嵌套菜單欄

    vue2.0使用v-for循環(huán)制作多級嵌套菜單欄

    這篇文章主要介紹了vue2.0制作多級嵌套菜單欄,主要使用v-for循環(huán)生成一個多級嵌套菜單欄,這個方法應用非常廣泛,需要的朋友可以參考下
    2018-06-06

最新評論