日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

原生JS实现移动端模块的左右滑动切换效果,基于vue、stylus

發(fā)布時間:2023/12/31 vue 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 原生JS实现移动端模块的左右滑动切换效果,基于vue、stylus 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原生JS實現(xiàn)移動端模塊的左右滑動動畫效果,基于vue、stylus

大概實現(xiàn)方案:

手指touch屏幕的整個過程,會派發(fā)touchstart、touchmove、touchend三個事件,對這三個事件設置相應函數(shù),通過移動過程中位置的變化計算出偏移值,進行對應的設置。

注:以下講解請忽略數(shù)據(jù)(可用兩個設置高度寬度的空dom代替),這篇博客只針對切換效果的實現(xiàn)

效果展示

①歌詞未左滑:


②歌詞左滑后:


所需數(shù)據(jù)定義:


解釋:currentShow用于標記當前顯示的模塊為CD模塊還是歌詞模塊、touchInfo對象用于保存touch事件的相關屬性

vue dom結構:


stylus:


原生JavaScript:

解釋:三個皆為相應dom中touch事件的方法,詳情請注釋即可。

middleTouchStart(e) {// touch開始時,將touchInfo對象設置為已初始化狀態(tài)this.touchInfo.initiated = true// 用來判斷是否是一次移動this.touchInfo.moved = falseconst touch = e.touches[0]// 記錄touch位置的橫坐標與縱坐標this.touchInfo.startX = touch.pageXthis.touchInfo.startY = touch.pageY},middleTouchMove(e) {if (!this.touchInfo.initiated) {return}const touch = e.touches[0]// 橫坐標與縱坐標的偏移const deltaX = touch.pageX - this.touchInfo.startXconst deltaY = touch.pageY - this.touchInfo.startYif (Math.abs(deltaY) > Math.abs(deltaX)) {return}if (!this.touchInfo.moved) {this.touchInfo.moved = true}// 判斷當前顯示的是cd還是歌詞,如果是cd,則當前左偏移值為0,否則偏移值為-window.innerWidthconst left = this.currentShow === 'cd' ? 0 : -window.innerWidth// 求偏移值const offsetWidth = Math.min(0, Math.max(-window.innerWidth, left + deltaX))// 求偏移值占可視區(qū)域的百分比,用于判斷是否應該切換顯示狀態(tài)this.touchInfo.percent = Math.abs(offsetWidth / window.innerWidth)// 移動時歌詞模塊的偏移效果this.$refs.lyricList.$el.style.transform = `translate3d(${offsetWidth}px,0,0)`this.$refs.lyricList.$el.style.transitionDuration = 0// 移動時CD模塊的淡出效果this.$refs.cd.style.opacity = 1 - this.touchInfo.percentthis.$refs.cd.style.transitionDuration = 0},middleTouchEnd() {if (!this.touchInfo.moved) {return}let offsetWidthlet opacityif (this.currentShow === 'cd') {// 移動百分比大于屏幕一半,則切換顯示狀態(tài)if (this.touchInfo.percent > 0.5) {offsetWidth = -window.innerWidthopacity = 0this.currentShow = 'lyric'} else {offsetWidth = 0opacity = 1}} else {if (this.touchInfo.percent < 0.5) {offsetWidth = 0this.currentShow = 'cd'opacity = 1} else {offsetWidth = -window.innerWidthopacity = 0}}// 最終狀態(tài)的設置// 動畫時間const time = 300// touch完畢后歌詞模塊應該放置的位置this.$refs.lyricList.$el.style.transform = `translate3d(${offsetWidth}px,0,0)`this.$refs.lyricList.$el.style.transitionDuration = `${time}ms`// touch完畢后CD模塊的透明度this.$refs.cd.style.opacity = opacitythis.$refs.cd.style.transitionDuration = `${time}ms`// 一次touch完成后,重置touchInfo對象尚未初始化狀態(tài)this.touchInfo.initiated = false}
至此,原生JS實現(xiàn)移動端模塊的左右滑動動畫效果實現(xiàn)完成。

總結

以上是生活随笔為你收集整理的原生JS实现移动端模块的左右滑动切换效果,基于vue、stylus的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费毛片视频 | 波多野结衣在线观看一区 | 狠狠干干干 | 欧美体内she精高潮 日韩一区免费 | 激情涩涩 | 欧美性色19p | 亚洲综合久久av一区二区三区 | 黄色小视频网 | 亚洲午夜久久久久久久久 | 天堂在线中文资源 | 久久精品国产亚洲AV熟女 | 亚洲人成影视 | 久久6视频 | 久久久久久久久久久网 | 插插久久 | 日韩精品一区二区三区网站 | 日韩 欧美 亚洲 国产 | 黄网在线播放 | 国产亚洲一区二区在线 | 伊人成年网 | 爽爽视频在线观看 | 欧美亚洲第一区 | 最近中文字幕第一页 | 精品人妻无码中文字幕18禁 | 欧洲精品久久久久毛片完整版 | 免费视频黄色 | 亚洲视频手机在线观看 | 亚洲av无码精品色午夜 | 高清视频免费在线观看 | 色天堂影院 | 亚洲Av无码成人精品区伊人 | 19韩国主播青草vip | 看一级黄色大片 | 在线免费小电影 | 色午夜婷婷 | 在线观看视频福利 | 亚洲人午夜射精精品日韩 | 天堂网在线视频 | 欧美精品少妇 | 亚洲一区二区三区高清视频 | 国产一区二区精品在线 | 免费在线观看av网站 | 日本久久久久久久久 | 国产精品5| 美国美女黄色片 | 成人性免费视频 | 亚洲一区,二区 | 97黄色片 | wwwav视频在线观看 | 日韩成人在线视频 | 水蜜桃av无码 | 狠狠干美女| 亚洲欧美日韩国产 | 日韩一级欧美 | 粉嫩小泬无遮挡久久久久久 | 黄色录像二级片 | 五月天av网| 香蕉视频一级 | 亚洲欧美偷拍视频 | 欧美国产日韩一区二区 | 18久久久 | 亚洲一区二区三区四区在线观看 | 男女午夜爽爽 | 欧美乱妇日本无乱码特黄大片 | 久久中文字幕人妻熟av女蜜柚m | 国产不卡视频在线观看 | 欧美一级做a爰片久久高潮 久热国产精品视频 | 久久er99热精品一区二区介绍 | 3d动漫精品啪啪一区二区竹菊 | 日韩欧美一 | 国产绳艺sm调教室论坛 | 亚洲一区欧美一区 | 污视频网站在线 | 亚洲午夜精品一区二区三区 | 亚洲欧美一区二区三区在线观看 | 丰满肉肉bbwwbbww | 日本黄色免费网站 | 日本一区二区三区四区在线观看 | 夏晴子在线 | 男女啪啪无遮挡 | 成人人人人人欧美片做爰 | 亚洲美女福利视频 | 久操视频免费看 | 四虎av在线| 欧美黑大粗 | 国产chinese男男gaygay视频 | 一级久久 | 日韩蜜桃视频 | 国产精品久久久久久久久免费 | 亚洲自拍在线观看 | 欧美一区二区三区色 | 污动漫网站 | 亚洲精品一区二区18漫画 | 国产在线一| 中文有码av | 欧美aⅴ| 91丝袜一区在线观看 | 亚洲第一天堂影院 | 久久av红桃一区二区小说 |