vue實(shí)現(xiàn)拖拽滑動(dòng)分割面板
本文實(shí)例為大家分享了vue實(shí)現(xiàn)拖拽滑動(dòng)分割面板的具體代碼,供大家參考,具體內(nèi)容如下
需求背景
左邊是列表,右邊是詳情。 想更大范圍的查看詳情,所以要拖拽滑塊,進(jìn)行面板的分割
整體思路
- 在布局上,采用flex布局,單位采用百分比。設(shè)置flex:1,讓其自動(dòng)伸縮
- 滑動(dòng)滑塊,計(jì)算滑塊在滑動(dòng)過(guò)程中,占整個(gè)頁(yè)面的百分比
- 將百分比,通過(guò)動(dòng)態(tài)樣式賦值給列表頁(yè)的寬度
- 同時(shí)改變滑塊的位置(也是百分比形式)
- 其次就是在vue里對(duì)鼠標(biāo)事件的使用
代碼實(shí)現(xiàn)
在template里 寫事件
@mousedown.prevent="mousedown"
在methods里寫方法
/** ? ? ?* 按下鼠標(biāo) ? ? ?*/ ? ? ? mousedown() { ? ? ? ? document.addEventListener('mousemove', this.handleMouseMove, false); ? ? ? ? document.addEventListener('mouseup', this.handleMouseUp, false); ? ? }, ? ? /** ? ? ?* 按下滑動(dòng)器,移動(dòng)鼠標(biāo) ? ? ?*/ ? ? handleMouseMove(e) { ? ? ? /** ? ? ? ?* 計(jì)算容器總寬度 ? ? ? ?* 計(jì)算滑塊到左邊的距離 ? ? ? ?* 計(jì)算偏移百分比: (滑塊距離左邊的距離 / 頁(yè)面寬度) * 100 ? ? ? ?* 傳遞移動(dòng)百分比和距左邊的距離 ? ? ? ?*/ ? ? ? const clientRect = this.$refs.mainContent.getBoundingClientRect(); ? ? ? const offset = e.pageX; ? ? ? const panelPercent = (offset / clientRect.width) * 100; ? ? ? this.panelPercent = panelPercent; ? ? ? this.mainContentWidth = offset; ? ? ? this.$refs.imgMove.style.left = panelPercent + '%'; ? ? ? console.log('拖動(dòng)中', this.panelPercent); ? ? }, ? ? /** ? ? ?* 松開(kāi)滑動(dòng)器 ? ? ?*/ ? ? handleMouseUp () { ? ? ? document.removeEventListener('mousemove', this.handleMouseMove, false); ? ? },
對(duì)邊界處理
if (this.panelPercent < this.min) { ? ? ? ? this.panelPercent = this.min ? ? ? } ? ? ? if (this.panelPercent > this.max) { ? ? ? ? this.panelPercent = this.max }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Vue中數(shù)據(jù)可視化詞云展示與詞云的生成
數(shù)據(jù)可視化是現(xiàn)代Web應(yīng)用程序中的一個(gè)重要組成部分,詞云是一種非常流行的數(shù)據(jù)可視化形式,可以用來(lái)展示文本數(shù)據(jù)中的主題和關(guān)鍵字,本文我們將介紹如何在Vue中使用詞云庫(kù)進(jìn)行數(shù)據(jù)可視化詞云展示和詞云生成,需要的可以參考一下2023-06-06詳解elementui之el-image-viewer(圖片查看器)
這篇文章主要介紹了詳解elementui之el-image-viewer(圖片查看器),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08基于vue中解決v-for使用報(bào)紅并出現(xiàn)警告的問(wèn)題
下面小編就為大家分享一篇基于vue中解決v-for使用報(bào)紅并出現(xiàn)警告的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-03-03vue3使用vue-cli引入windicss報(bào)錯(cuò)Can‘t resolve windi.css問(wèn)題
這篇文章主要介紹了vue3使用vue-cli引入windicss報(bào)錯(cuò)Can‘t resolve windi.css問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03vue報(bào)錯(cuò)Failed to execute 'appendChild&apos
這篇文章主要為大家介紹了vue報(bào)錯(cuò)Failed to execute 'appendChild' on 'Node'解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11Vue項(xiàng)目打包(build)時(shí),自動(dòng)打以時(shí)間命名的壓縮包方式
這篇文章主要介紹了Vue項(xiàng)目打包(build)時(shí),自動(dòng)打以時(shí)間命名的壓縮包方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10Vue3?封裝?Element?Plus?Menu?無(wú)限級(jí)菜單組件功能的詳細(xì)代碼
本文分別使用?SFC(模板方式)和?tsx?方式對(duì)?Element?Plus?*el-menu*?組件進(jìn)行二次封裝,實(shí)現(xiàn)配置化的菜單,有了配置化的菜單,后續(xù)便可以根據(jù)路由動(dòng)態(tài)渲染菜單,對(duì)Vue3?無(wú)限級(jí)菜單組件相關(guān)知識(shí)感興趣的朋友一起看看吧2022-09-09基于vue2的canvas時(shí)鐘倒計(jì)時(shí)組件步驟解析
今天給大家介紹一款基于vue2的canvas時(shí)鐘倒計(jì)時(shí)組件,這個(gè)時(shí)鐘倒計(jì)時(shí)組件采用canvas動(dòng)畫(huà)的炫酷動(dòng)畫(huà)效果形式,根據(jù)剩余時(shí)間的多少變換顏色和旋轉(zhuǎn)扇形的速度,適合搶購(gòu)、拍賣、下注等業(yè)務(wù)場(chǎng)景,且對(duì)移動(dòng)端友好,需要的朋友可以參考下2018-11-11vue,angular,avalon這三種MVVM框架優(yōu)缺點(diǎn)
本文給大家具體分析了下vue,angular,avalon這三種MVVM框架優(yōu)缺點(diǎn),十分的細(xì)致全面,有需要的小伙伴可以參考下2016-04-04