vue实现拖拽进度条
导读:收集整理的这篇文章主要介绍了vue实现拖拽进度条,觉得挺不错的,现在分享给大家,也给大家做个参考。 本文实例为大家分享了vue实现拖拽进度条的具体代码,供大家参考,具体内容如下组件代码:...
收集整理的这篇文章主要介绍了vue实现拖拽进度条,觉得挺不错的,现在分享给大家,也给大家做个参考。 本文实例为大家分享了vue实现拖拽进度条的具体代码,供大家参考,具体内容如下
组件代码:
template> div> div class="slider" ref="slider"> div class="PRocess" :style="{ width } "> /div> div class="thunk" ref="trunk" :style="{ left } "> div class="block"> /div> div class="tips"> !-- span> { { scale*100} } /span> --> i class="fas fa-caret-down"> /i> /div> /div> /div> div> button @click=" () => { this.PEr++; } " > +/button > { { per } } %button @click=" () => { if (this.per > 0) { this.per--; } } " > - /button> /div> /div> /template> script> /* * min 进度条最小值 * max 进度条最大值 * v-model 对当前值进行双向绑定实时显示拖拽进度 * */export default { props: ["min", "max", "value"], data() { return { slider: null, //滚动条DOM元素 thunk: null, //拖拽DOM元素 per: this.value, //当前值 } ; } , //渲染到页面的时候 mounted() { this.slider = this.$refs.slider; this.thunk = this.$refs.trunk; VAR _this = this; this.thunk.onmousedown = function (e) { var width = parseint(_this.width); var disX = e.clientX; document.onmouSEMove = function (e) { // value, left, width // 当value变化的时候,会通过计算属性修改left,width // 拖拽的时候获取的新width var newWidth = e.clientX - disX + width; // 拖拽的时候得到新的百分比 var scale = newWidth / _this.slider.offsetWidth; _this.per = Math.ceil((_this.max - _this.min) * scale + _this.min); _this.per = Math.max(_this.per, _this.min); _this.per = Math.min(_this.per, _this.max); _this.$emIT("input", _this.per); } ; document.onmouseup = function () { document.onmousemove = document.onmouseup = null; } ; return false; } ; } , computed: { // 设置一个百分比,提供计算slider进度宽度和trunk的left值 // 对应公式为 当前值-最小值/最大值-最小值 = slider进度width / slider总width // trunk left = slider进度width + trunk宽度/2 scale() { return (this.per - this.min) / (this.max - this.min); } , width() { if (this.slider) { return this.slider.offsetWidth * this.scale + "px"; } else { return 0 + "px"; } } , left() { if (this.slider) { return ( this.slider.offsetWidth * this.scale - this.thunk.offsetWidth / 2 + "px" ); } else { return 0 + "px"; } } , } ,} ; /script> style> .box { margin: 100px auto 0; width: 80%; } .clear:after { content: ""; display: block; clear: both; } .slider { user-select: none; position: relative; margin: 20px 0; width: 400px; height: 10px; background: #e4e7ed; border-radius: 5px; cursor: pointer; } .slider .process { position: absolute; left: 0; top: 0; width: 112px; height: 10px; border-radius: 5px; background: #81b159; } .slider .thunk { position: absolute; left: 100px; top: -7px; width: 20px; height: 20px; } .slider .block { width: 20px; height: 20px; border-radius: 50%; border: 2px solid #409eff; background: rgba(255, 255, 255, 1); transition: 0.2s all; } .slider .tips { position: absolute; left: -7px; bottom: 30px; min-width: 15px; text-align: center; padding: 4px 8px; /* background: #000; */ border-radius: 5px; height: 24px; color: #fff; } .slider .tips i { position: absolute; margin-left: -5px; left: 50%; bottom: -9px; font-Size: 16px; color: #000; } .slider .block:hover { transform: scale(1.1); opacity: 0.6; } /style>
调用:
template> slider :min="0" :max="100" v-model="per"> /slider> /template> script> import slider From "@/components/slider"; export default { data() { return { } ; } , computed: { per: { get() { return 0; } , set(val) { console.LOG(val); } , } , } , components: { slider } , mounted() { } , methods: { } ,} ; /script> style > /style>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
- Vue实现圆环进度条的示例
- vue.js+ElementUI实现进度条提示密码强度效果
- vue页面加载时的进度条功能(实例代码)
- 环形加载进度条封装(Vue插件版和原生js版)
- vue配置nprogress实现页面顶部进度条
- Vue使用NProgress进度条的方法
- vue项目实现文件下载进度条功能
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: vue实现拖拽进度条
本文地址: https://pptw.com/jishu/594639.html