11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM

摘要:
vue中的数据驱动视图。用于创建组件的文件夹称为拆分窗格。在路由列表中,注册vue文件以添加vue页面以创建组件,并将名称设置为SplitPane以创建索引。js导入组件,导出以导入组件,然后注册组件。它们有一个名为pane的公共类。左侧为窗格左侧,右侧为窗格右侧。它们的高度也与父容器的高度相同&左侧是拼接父级的窗格。此处窗格的宽度设置为50%。因此,我们将mouseMove事件绑定到文档。这样,他就不会在这个元素上选择操作。

11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第1张

vue中是数据驱动视图。
 

创建组件的文件夹叫做split-pane
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第2张
在路由列表里面注册一下
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第3张
添加这个vue页面
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第4张
创建组件的vue文件,设置name为SplitPane
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第5张
创建index.js.把组件引进来,并导出去
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第6张
引入这个组件,然后注册这个组件。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第7张
容器中分成两个区域,通过拖动来改变两个区域的比例。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第8张
还可以上下,嵌套使用。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第9张

11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第10张
分为三个部分,左边的区域,右边的区域,然后是中间可拖动的部分
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第11张
我们首先来定义三个div。它的宽和高应该和父容器是一样的,所以这里我们设置它的高度和宽度是100%
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第12张
宽度其实可以不设置,div是一个块级元素,它本身的宽度就是和它容器的宽度是一样的

less里面的写法,有层级管理的关系的class类型,可以嵌套着写。他们有一个共同的class是pane。左边是pane-left右边是pane-right
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第13张
它们的高度也是和父容器一样高
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第14张
&-left就是拼接了父级别的pane。所以这里就相当于是.pane-left
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第15张
我们给左边加了一个背景色,可以看到它的颜色和父容器是一样宽的。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第16张
再给右侧的div设置一个背景色是橘黄色的,可以看到俩div成了上下布局了,因为他俩的宽度都是100%和父容器的宽度一样。所以右侧的就被挤下来了
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第17张
想让这俩div在一排上显示。给.pane设置宽度为50%。值是宽度变窄了, 还没有在一排上显示。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第18张
可能有个默认的样式是居中的,
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第19张
把这里注释掉。因为设置了居中显示,所以导致了上面的问题。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第20张

这里改成float:left。这样就上到一行里面显示了。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第21张
如果想设置左边是30%的宽度,右边是70%的宽度
把float:left和width都去掉。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第22张
给他俩一个position,都设置为绝对定位
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第23张
设置绝对定位后,它会往上找,去他的父元素一级一级的找,它会根据有定位属性的父元素来定位。如果没有它就一直找到html标签。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第24张
所以这里地方我们要给wrapper一个相对定位的属性。这样又不会使wrapper的元素受到影响。 
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第25张
让他俩的父元素的top位置都是0,左边设置宽度为30%。右边这个呢?也想让他用30%的这个值,top:0我们在.pane已经设置了,这里会继承过来,

11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第26张
这样设置右边就是70%的宽度,用到了同样的变量30%。这样就是两边加起来就是100%
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第27张
把左边改成20%
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第28张
右边的left也改成20%。这样他俩加起来就是100%
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第29张
30%的这个值,想通过js变量去控制,这样这个值就不能写在css里面了。我们给它绑定一个变量,变量在data里面定义。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第30张
30%通过计算属性计算出来。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第31张
这样就把左边的30%的css属性注释掉。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第32张
右边是通过left的值,修改它的宽度。所以右边我们绑定的css属性是left
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第33张

11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第34张

通过一个按钮改变这个变量的值来试一下
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第35张
把这个按钮放在了左侧的面板里面
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第36张
通过点击左侧按钮的面板,改变左侧pane的宽度
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第37张
每次点击宽度变小。Vue里面,这样通过数据驱动样式的改变,这样避免了数据和视图不对应
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第38张

定义trigger中间拖动条

11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第39张

11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第40张
它要显示在中间也是需要设置绝对定位。设置了top为0,它显示在了最左侧。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第41张
也是给中间的条绑定style属性。但是绑定上left后,视图中红色的调不见了。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第42张
中间的条,实际上在这里,说明可能是被元素遮住了。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第43张
通过设置一个x-index来看下
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第44张
红色的条 实际上是盖在,右侧的
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第45张
我们希望他在最中间显示。
首先中间条的宽度我们通过属性传递进来,默认是8
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第46张
首先是向左偏移30%和left的宽度是一样的,然后它需要减少4个像素,来达到在最中间,这里我们用到css3的一个方法calc(),它允许你在里面做一些计算。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第47张
30%的偏移再减去4像素,就可以这么写
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第48张
减去的是triggerWidth除以2
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第49张
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第50张

11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第51张
这里绑定的是 triggerWidh 后面是px
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第52张
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第53张
中间只用到了width属性
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第54张
说明我们这里的计算属性并没有生效
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第55张
我们这里把计算出来的值打印出来看一下
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第56张
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第57张
这里的单词拼错, 应该是calc
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第58张
红色的条被左侧遮住了一半
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第59张
被右侧也遮住了一半
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第60张

鼠标拖动中间trigger条

这就用到了鼠标的三个事件了
首先绑定一个mousemove事件
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第61张
我们会用到参数里面的pageX就是鼠标距离页面左侧的像素,
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第62张
只要能算出来鼠标距离左侧有多少像素,我们只要知道这个容器距离页面左侧多少,用鼠标的距离减去容器的距离页面的距离,就是左侧left的宽度了。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第63张
那么怎么获取父容器距离左边的距离呢?获取dom容器呢 我们用ref属性,给父容器div加一个ref属性为outer
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第64张
获取到dom后,它有个方法叫做getBoundingClientRect,这个方法返回一个对象,
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第65张
这个方法返回一个对象,返回一个属性,
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第66张
先来看下它返回的值
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第67张
对象里面包含了这些属性,这些属性在IE9下也是支持的,所以兼容性是没有问题的。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第68张
所以这里我们减去left
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第69张

鼠标的事件,有时候鼠标会超过这个框,应该绑定在页面级别。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第70张
所以我们把mouseMove事件绑定子啊document上。就是鼠标在中间的条上,按下的时候绑定这个事件。
所以这里中间的条的事件,改成mousedown事件
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第71张
鼠标按下我们给document绑定一个事件,它的回调事件是下面的handleMousemove事件
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第72张

当点击这个调的时候,然后鼠标在页面上移动,console内不断的输出的
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第73张
偏移量除以容器的总宽度,再乘以100,就是百分比
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第74张
现在这个条就随着鼠标的移动而移动了
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第75张
我们希望按下鼠标的时候 开始移动,松开鼠标的时候就应该停止了。
所以我们就需要有个状态,鼠标是按下还是抬起
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第76张
只有为true的时候才能移动。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第77张
mouseup的事件
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第78张
这样只有鼠标按下才能移动,鼠标抬起就不能移动了。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第79张
在鼠标按下的时候,有一个瞬间的偏移。出现问题的原因是我们在注册事件的时候忽略了 中间的条 也有个宽度。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第80张
所以在条上有个初始的偏移量,它的初始是0
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第81张
我们就要给这个便宜量设置一个值,当我们按下的时候。我要把这个宽度也计算在内。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第82张
减去这个条距离页面左侧的距离。就是鼠标距离这个条的左侧距离。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第83张
因为这个事件是发生在这个条上的,
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第84张

在move的时候,我们要减去这个值
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第85张
还需要再加上条一半的宽度
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第86张
这个时候再去拖动,就不会有一瞬间的移动了
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第87张

设置最大值和最小值。

拖动最右边应该有个头,这里完全拖出去了。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第88张
设置最小的百分比值,是0.1
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第89张
当你的拖动到百分之0.1的时候,左侧的值就不会再变了。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第90张
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第91张
除法的逻辑加到上面去
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第92张
如果偏移量小于这个最小值的话,那么就用这个最小值。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第93张
到了最小值 再拖,就拖不动了。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第94张
我们再来设置一个最大值,最大值设置为0.9
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第95张
超过最大值,就是最大值。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第96张


11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第97张

拖动过程中,选中的问题

拖动过程中,偶尔会做了一些选中的操作
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第98张

通过设置一个样式。这样他就不会在这个元素上选中操作了。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第99张

初始偏移量

设置初始的偏移
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第100张
调用的时候就可以设置初始的偏移了 。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第101张
这里就注释掉,不用了。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第102张
这里就改成value的形式
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第103张
我们是通过拖动来修改这个值的,那么有个问题就是。子组件如果想改变父组件的值,不能直接通过这种赋值的形式。还是要通过事件来触发 ,告诉父组件,父组件内做事件的响应,
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第104张
再父组件内,把这个传入百分比值改成变量
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第105张
然后给它绑定一个事件
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第106张
回调函数里面有个参数,我们接收这个参数,并赋值给偏移量的变量值
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第107张

11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第108张
在这里我们要抛出这个事件
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第109张
拖动和修改都没有问题了。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第110张

另外一种方式vue提供的语法糖

v-model简写的形式

11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第111张

11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第112张

.sync修饰符


11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第113张

方法注释掉
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第114张
子组件内,事件也不抛出去了。改用update:value
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第115张

11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第116张
这么写首先给value绑定值offset,同时会给你绑定一个事件会更新这个offset的值,
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第117张
子组件内要触发一个事件,固定的就叫做update。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第118张
update后面的:value就是我们这里父组件的属性名
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第119张
最后 就是你要更新的值
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第120张
在区域内填充内容

就用到了我们之前讲到的slot插槽的概念
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第121张


11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第122张
右边的right给压到中间的条下面了。给右侧绑定一个triggerWidth除以2

11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第123张
这样它的内容就不会被压到了。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第124张
同理left也有一个padding属性
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第125张

鼠标的样式

鼠标放上去,要让用户知道这是一个可以拖动的,我们就需要给它设置一个css的演示
鼠标的样式记不住呢,推荐大家一个网站
http://css-cursor.techstream.org/
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第126张

鼠标放上去会显示对应的鼠标样式。
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第127张

左右拖动的效果就是这个了
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第128张
11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第129张


11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM第130张
 
结束

免责声明:文章转载自《11.Vue技术栈开发实战-从SplitPane组件谈Vue中如何“操作”DOM》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇android开发学习 ------- 自定义View 圆 ,其点击事件 及 确定当前view的层级关系前端视频播放组件 vue-video-player下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue中使用v-chart改变柱状图颜色以及X轴Y轴的文字颜色和大小以及标题

1.html部分 <ve-histogram :tooltip-visible="true" :x-axis="xAxis" :y-axis="yAxis" :title="title"...

Vuejs 使用 lib 库模式打包 umd 解决 NPM 包发布的问题

由于升级了 v0.2 版 GearCase 使用打包工具从 parcel 更换成 vue-cli 3.x。因此打包后发布 NPM 包的方式与之前有很大的差异,这也导致了在发布完 GearCase v0.2.2 版本之后,我自己在进行 NPM / Yarn 安装包时。根本无法通过之前文档的方式,进行引入并注册组件。后来我大概花费了两天的时间来解决这个问题。...

高级Swing容器(一)

第10章探讨了AWT与Swing中的布局管理器。在本章中,我们将会了解一些构建在这些布局管理器之上的容器以及其他的一些无需布局管理器的容器。我们的探讨由Box类开始,我们将会发现使用BoxLayout管理器来创建一个单行或单列组件的最好方法。接下来我们会了解JSplitPane容器,他类似于其中只有两个组件的特殊的Box。JSplitPane提供了一个分隔...

vue项目 elemnet 升级版本

打开cmd命令 先卸载项目中的 node_modules rimraf node_modules 卸载项目中的element-ui npm uninstall element-ui -S 重新安装element-ui npm install element-ui -S 安装依赖 npm install npm run dev 飞起~  ...

Algorithm算法库

algorithm 是C++标准程式库中的一个头文件,定义了C++ STL标准中的基础性的算法(均为函数模板)。在C++98中,共计有70个算法模板函数;在C++11中,增加了20个算法模板函数。其中有5个算法模板函数定义在头文件numeric中。 下文所称的“序列”(sequence),是指可以用迭代器顺序访问的容器。 有返回值的函数,返回值都是迭代器,...

----Vue 中mixin 的用法详解----

说下我对vue中mixin的一点理解   vue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用。最开始我一度认为这个和组件好像没啥区别。。后来发现错了。下面我们来看看mixins和普通情况下引入组件有什么区别?      组件在引用之后相当于在父组件内开辟了一块单独的空间,来根据父组件props过来的值进行相应的操作,单本质上两者还是...