效果展示:
點擊即可隨意調(diào)節(jié)菜單寬度
變動后
頁面結(jié)構(gòu)一共分為三部分,加上一個伸縮按鈕,在你的項目對應(yīng)的部分都加上class名。
我這里定義的分別是box、left、mid、resize(按鈕類名)
html
頁面結(jié)構(gòu)劃分完成之后,完善一下樣式(直接復(fù)制,菜單類名換成你的)
/*拖拽區(qū)div樣式*/ .resize { cursor: col-resize; position: relative; // top: 45%; top: 400px; background-color: #d6d6d6; border-radius: 5px; margin-top: -10px; width: 10px; height: 50px; background-size: cover; background-position: center; font-size: 32px; color: white; } /*拖拽區(qū)鼠標懸停樣式*/ .resize:hover { color: #444444; } //左側(cè)菜單設(shè)置百分比寬度,方便拖拽自適應(yīng) .main_menu { width:22%; /*右側(cè)初始化寬度*/ height: 100%; background: #BF334E!important; box-shadow: 0px 0px 0px 0px rgba(0, 0, 0, 0.11); }
methods里面的拖拽函數(shù):
// 拖拽事件 dragControllerDiv() { var resize = document.getElementsByClassName('resize') var left = document.getElementsByClassName('left') var mid = document.getElementsByClassName('mid') var box = document.getElementsByClassName('box') for (let i = 0; i < resize.length; i++) { // 鼠標按下事件 resize[i].onmousedown = function (e) { //顏色改變提醒 resize[i].style.background = '#818181' var startX = e.clientX resize[i].left = resize[i].offsetLeft // 鼠標拖動事件 document.onmousemove = function (e) { console.log('鼠標按下') var endX = e.clientX var moveLen = resize[i].left + (endX - startX - 270) // (endx-startx)=移動的距離。resize[i].left+移動的距離=左邊區(qū)域最后的寬度 var maxT = box[i].clientWidth - resize[i].offsetWidth - 270// 容器寬度 - 左邊區(qū)域的寬度 = 右邊區(qū)域的寬度 console.log(moveLen,maxT) if (moveLen < 32) moveLen = 270 // 左邊區(qū)域的最小寬度為32px if (moveLen > maxT - 150) moveLen = maxT - 650 //右邊區(qū)域最小寬度為150px resize[i].style.left = moveLen // 設(shè)置左側(cè)區(qū)域的寬度 for (let j = 0; j < left.length; j++) { console.log( left[j].style) left[j].style.width = moveLen + 'px' mid[j].style.width = box[i].clientWidth - moveLen - 10 + 'px' } } // 鼠標松開事件 document.onmouseup = function (evt) { console.log('鼠標收起') //顏色恢復(fù) resize[i].style.background = '#d6d6d6' document.onmousemove = null document.onmouseup = null resize[i].releaseCapture && resize[i].releaseCapture() //當你不在需要繼續(xù)獲得鼠標消息就要應(yīng)該調(diào)用ReleaseCapture()釋放掉 } resize[i].setCapture && resize[i].setCapture() //該函數(shù)在屬于當前線程的指定窗口里設(shè)置鼠標捕獲 return false } } },
mounted里面調(diào)用:
mounted() { this.dragControllerDiv() },
以上就是全部內(nèi)容,請大家多多關(guān)注。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/127673.html
摘要:先看這個值即為判斷顯示展開還是收縮狀態(tài)的開關(guān)。這樣就實現(xiàn)了展開狀態(tài)下的菜單。如果有時間的話,我會把這個系列寫完,知道朋友們能獨立開發(fā)一個完整的的單頁面后臺管理程序。 涉及到路由,權(quán)限等等相關(guān)內(nèi)容的部分,跟本文主旨關(guān)系不大,所以我將會在另外一篇文章中詳述,混在一起的話內(nèi)容太多了 基于element-ui的左側(cè)可伸縮的菜單通過vuejs來開發(fā)支持展開收縮的菜單是非常簡單的,只需要v-i...
摘要:推薦閱讀原文學習筆記實例實例組件間通信組件間通信組件間通信用戶信息表圖書電商數(shù)據(jù)圖書電商數(shù)據(jù)圖書電商數(shù)據(jù)渲染微信精選數(shù)據(jù)渲染微信精選數(shù)據(jù)渲染微信 推薦閱讀原文 學習筆記:Vue實例 Vue實例 組件間通信 See the Pen 組件間通信 by whjin (@whjin) on CodePen. 圖書電商數(shù)據(jù) See the Pen 圖書電商數(shù)據(jù) by whjin (@whji...
摘要:具體實現(xiàn)請查看和的退出登陸回調(diào)方法?,F(xiàn)在除了必要的頁面需要在一開始添加到路由表里,其他的頁面都可以根據(jù)后臺數(shù)據(jù)來自動生成。另外,如果在未登陸時要訪問某一指定頁面,會重定向到登陸頁,登陸成功后會自動跳到這個指定頁面。 項目地址 vue-admin-template 在線預(yù)覽 更新 2019.6.25 更新 修復(fù)路由表沖突問題 退出當前用戶,換賬號重新登陸時,上個賬號和現(xiàn)在的賬號路由表會有...
摘要:基本設(shè)計和分析前端服務(wù)端主要功能打開思否頁面,根據(jù)頁面的功能點,設(shè)計出相關(guān)的數(shù)據(jù)表,和管理系統(tǒng)需要的相關(guān)頁面。 本文主要想對前端權(quán)限管理功能實現(xiàn)做一個分享,所以并不會對后臺管理的框架結(jié)構(gòu)做太詳細介紹,如果有朋友對其他有興趣可以留言。 基本設(shè)計和分析 前端 vue + elementui 服務(wù)端: node + mysql + nginx 主要功能 打開思否頁面,根據(jù)頁面的功能點,設(shè)...
閱讀 685·2023-03-27 18:33
閱讀 887·2023-03-26 17:27
閱讀 752·2023-03-26 17:14
閱讀 736·2023-03-17 21:13
閱讀 665·2023-03-17 08:28
閱讀 2083·2023-02-27 22:32
閱讀 1517·2023-02-27 22:27
閱讀 2430·2023-01-20 08:28