vue實現左右滑動效果例項程式碼
阿新 • • 發佈:2021-05-24
前言
個人實際開發中用到的效果問題總結出來便於自己以後開發檢視呼叫,如果也適用其他人請隨意拿走勿噴就行!
vue.js是現在流行的js框架之一,vue 是一www.cppcns.com套用於構建使用者介面的漸進式javascript框架,與其它大型框架不同的是:vue被設計為可以自底向上逐層應用。vue的核心庫只關注檢視層,不僅易於上手,還便於與第三方庫或既有專案整合,另外一個方面,當vue與現代化的工具鏈以及各種支援類庫結合使用時,vue也完全能夠為複雜的單頁應用提供驅動。
vue.js是用於構建互動式的Web介面的庫,它提供MVVM資料繫結和一個可組合的元件系統,具有簡單、靈活的API。從技術上講,vue.js集中在MVVM模式上的檢視模型層(viewModel),並通過雙向資料繫結連線檢視(view) 和模型(model)。實際的DOM操作和輸出格式被抽象出來成指令和過濾器。相比其他的MVVM框架,vue.js更容易上手,它讓你通過簡單而靈活的API建立由資料驅動的UI元件。
例項程式碼
HTML程式碼
<template> <div id="SlideBar" class="box"> <div class="iteJssUbfszkm" 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="vue實現左右滑動效果例項程式碼"> <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:relativewww.cppcns.com; 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寬度的一半就滑回去 http://www.cppcns.com }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左右滑動內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!