我封装了一个滑动条组件,重写了一个滑动条
使用el-slider封装组件时,发现初始化赋值时总会触发el-slider的input事件。
<el-slider
class="my-slider"
v-model="mySliderValue"
:show-tooltip="false"
:min="preferences.min"
:max="preferences.max"
:step="preferences.step"
:vertical="preferences.vertical"
:height="(this.preferences.style.height / 5) * 4 - 20 + `px`"
@input="sliderValueInput()"
@change="sliderValueSave"
:style="elSliderWidth"
></el-slider>
猜测有可能是el-slider封装时,v-model导致的(详情)
具体原因不太清楚
具体问题
目前我试验的效果是,但凡v-model的值发生改变,就会触发input事件
我需要实现这样一个方法:滑块在被代码赋值的情况下不能触发input效果,在鼠标拖拉的情况下触发input效果。
解决方法
1、用html的原生滑块
<input
type="range"
class="my-slider"
v-model="mySliderValue"
:min="preferences.min"
:max="preferences.max"
@input="sliderValueInput()"
:style="elSliderWidth"
/>
这种情况下初始化赋值时不会触发input事件,正好满足要求。
既然原生属性满足要求,按理来说使用将原生属性绑定到el-slider组件上就能完美解决这个问题。
正好Vue的官网(详情)提到了.native
可以满足这个要求
于是我将@input="sliderValueInput()"
换成@input.native="sliderValueInput()"
好家伙,input事件完全失效了,拖拉滑动条都不会触发了。。。。。。
官网提到了.native失效的原因,我翻了一下el-slider的源码,有点想下手改源码,
咱太菜了,还是算了吧。。。。
聪明的我立马把el-slider组件的滑块换成了原生input组件的滑块,
但是这样的话功能是实现了,我的滑动条样式基本上全部要重写,滑动条横竖切换的功能也要自己重新实现,
烦人啊啊啊啊啊啊啊
2、迂回的办法,通过监听鼠标点击滑块和鼠标松开滑块,间接监听到滑动条的拖拉
使用mousedown事件监听鼠标点击事件
<el-slider
class="my-slider"
v-model="mySliderValue"
:show-tooltip="false"
:min="preferences.min"
:max="preferences.max"
:step="preferences.step"
:vertical="preferences.vertical"
:height="(this.preferences.style.height / 5) * 4 - 20 + `px`"
@input="sliderValueInput()"
@mousedown.native="handleMouseDown"
@change="sliderValueSave"
:style="elSliderWidth"
></el-slider>
在鼠标监听事件里监听抬起事件
//鼠标点击事件
handleMouseDown() {
// debugger
console.log("鼠标点击滑块事件");
this.mouseDown = true;
window.onmouseup = () => {
console.log("鼠标抬起滑块事件");
this.mouseDown = false;
window.onmouseup = null;
};
},
// 在滑块拖动之后
sliderValueInput() {
if (this.mouseDown) {
。。。。
}
},
值得注意的时,这种情况下,鼠标事件居然是在使用原生属性(加.native
)的情况下才能触发鼠标效果。文章来源:https://www.toymoban.com/news/detail-621945.html
是我天真了,我准备要对和element的源码下手了文章来源地址https://www.toymoban.com/news/detail-621945.html
到了这里,关于Element UI中防止赋值触发el-slider的input事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!