vue拖拽改变宽度的实现示例
作者:九亿宅男的梦
本文主要介绍了vue拖拽改变宽度的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
效果图
1.封装组件ResizeBox.vue
<template> <div ref="resize" class="resize"> <div ref="resizeHandle" class="handle-resize" /> <slot /> </div> </template> <script> export default { name: 'ResizeBox', props: { resizeConf: { type: Object, default: () => ({ width: 280, // 初始宽度 widthRange: [100, 500] // 宽度范围 }) } }, mounted() { this.dragControllerDiv(this.$refs.resize, this.$refs.resizeHandle) }, methods: { dragControllerDiv: function(resizeBox, resizeHandle) { resizeBox.style.width = this.resizeConf.width + 'px' // 鼠标按下事件 resizeHandle.onmousedown = e => { const resizeWidth = resizeBox.offsetWidth const startX = e.clientX // 水平坐标 // 鼠标拖动事件 document.onmousemove = ev => { const moveX = ev.clientX const moveLen = resizeWidth + (moveX - startX) if (this.resizeConf.widthRange[0] <= moveLen && this.resizeConf.widthRange[1] >= moveLen) { resizeBox.style.width = moveLen + 'px' } } // 鼠标松开事件 document.onmouseup = function() { document.onmousemove = null document.onmouseup = null } } } } } </script> <style lang="scss" scoped> .resize { background: #fbfbfb; position: relative; word-wrap: break-word; .handle-resize { cursor: col-resize; position: absolute; right: -2px; width: 6px; height: 50px; border-left: 2px solid #c5c5c5; border-right: 2px solid #c5c5c5; top: calc(50% - 25px); } } </style>
2.组件中使用
<template> <div class="container sa-flex"> <ResizeBox :resize-conf="resizeConf"> 我是左边我是左边我是左边我是左边我是左边我是左边我是左边我是左边我是左边我是左边 </ResizeBox> <div class="right sa-flex-1"> 我是右边我是右边我是右边我是右边我是右边我是右边我是右边我是右边我是右边我是右边 </div> </div> </template> <script> import ResizeBox from './ResizeBox.vue' export default { components: { ResizeBox }, data() { return { resizeConf: { width: 280, // 初始宽度 widthRange: [100, 500] // 宽度范围 } } } } </script> <style lang="scss"> .sa-flex { display: flex; flex-wrap: no-wrap } .sa-flex-1 { flex:1 } .container { min-height: 600px; background: #eee; } </style>
到此这篇关于vue拖拽改变宽度的实现示例的文章就介绍到这了,更多相关vue拖拽改变宽度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!