在Vue中如何实现事件响应式进度条组件

这篇文章主要介绍了vue的事件响应式进度条组件的实例代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下

写在前面

找了很多vue进度条组件,都不包含拖拽和点击事件,input range倒是原生包含input和change事件,但是直接基于input range做进度条的话,样式部分需要做大量调整和兼容性处理。即使做好了,将来需要修改外观,又是一番折腾。

基于以上两个原因,做了一个可以响应input和change事件(即一个是拖动进度条到某处,一个是在进度条某位置点击使其值变为该位置)的p实现的Vue组件,这样既满足了对进度条事件的需求,也带来了如有需求变动,样式修改很方便的好处。

效果图

立即学习“前端免费学习笔记(深入)”;

在Vue中如何实现事件响应式进度条组件

以上就是可以利用本组件实现的一些效果,他们都能响应input和change两种事件。

首先是模板部分

认真看一下上图,怎么构造HTML模板还是需要一番考虑的,我也是改了好几次,最后定的这个结构。首先有一层外包p就不说了。然后外包p下面就一个class = ‘progress’的p,这个p内部的p是表示进度条已划过部分(class=”left”),class=”left”这个p内部又包含一个表示p来表示我们可以拖动的滑块小球。

说一下好处,这样的结构,做出来的样式,在页面检查元素的时候,能够清晰看到每个p和页面上展示的部分是重合的。

如果你的进度条 表示整个长度的p、表示左半部分的p、表示滑块的p不是我这种嵌套结构,而是兄弟节点关系,你就得用样式做相对定位,让后两个兄弟节点上移,这样,检查元素的时候,进度条下面的其他组件的盒子就会浸透到进度条的区域。虽然用户不会检查元素,但是时间久了之后也不方便程序员自己观察,不是吗。

也就是说,我们都希望HTML结构表达的元素和检查元素的时候显示的每个元素的占位是一致的。这也算是对你的HTML结构是否构造合理的一个评价指标。

 

  

   

    

         

登录后复制

js部分

对现在就有需求使用这个带事件的进度条的同学来说,看看这部分,可以帮助你自己修改、完善它。

而对于想要先试用该组件的同学,则可以先不看这部分,等你用到发现该组件功能不足的时候,再看这部分代码也不迟。

export default {  name: 'ProgressBar',  props: {   leftBg: String,   bgc: String,   ballBgc: String,   height: String,   width: String,   max: {    type: Number,    default: 100,   },   min: {    type: Number,    default: 0,   },   value: {    type: Number,    default: 36,   },  },  data: function () {   return {    pValue: this.value,    pMax: this.max,    pMin: this.min,    wrapStyle: {     'width': this.width,    },    pBarStyle: {     'backgroundColor': this.bgc,     'height': this.height,    },    leftStyle: {     'width': this.progressPercent + '%',     'background': this.leftBg,     'height': this.height,    },    ballStyle: {     'backgroundColor': this.ballBgc,     'height': this.height,     'width': this.height,     'borderRadius': parseInt(this.height) / 2 + 'px',     'right': - parseInt(this.height) / 2 + 'px',    },    // 标记是否按下鼠标    isMouseDownOnBall: false,   }  },  computed: {   progressPercent(){    return (this.pValue - this.pMin) / (this.pMax - this.pMin) * 100;   },   progressElement(){    return this.$el.getElementsByClassName('progress')[0];   },  },  methods: {   mousedownHandler(e){    if(e.which === 1){     this.isMouseDownOnBall = true;    }   },   mousemoveHandler(e){    if(this.isMouseDownOnBall === true){     // 修改进度条本身     let decimal = (e.clientX - this.$el.offsetLeft) / this.progressElement.clientWidth;     let percent = decimal * 100;     this.leftStyle.width = percent + '%';     // 修改value     this.pValue = this.pMin + decimal * (this.pMax - this.pMin);     this.$emit('pbar-drag', this.pValue, percent);    }   },   mouseupHandler(e){    if(this.isMouseDownOnBall){     // 修改进度条本身     let decimal = (e.clientX - this.$el.offsetLeft) / this.progressElement.clientWidth;     let percent = decimal * 100;     this.leftStyle.width = percent + '%';     // 修改value     this.pValue = this.pMin + decimal * (this.pMax - this.pMin);     this.$emit('pbar-seek', this.pValue, percent);     this.isMouseDownOnBall = false;    }   },   mouseoverHandler(e){    // 没有按左键进入进度条    if(e.which === 0){     this.isMouseDownOnBall = false;    }   }  },  watch: {   max(cur, old){    this.pMax = cur;   },   min(cur, old){    this.pMin = cur;   },   value(cur, old){    this.pValue = cur;   },   progressPercent(cur, old){    this.leftStyle.width = cur + '%';   }  },  mounted(){   // 数据验证   if(this.max 

安装、使用

地址

代码库地址在GitHub

安装、使用

npm install vue-draggable-progressbar --saveimport progressBar from 'vue-draggable-progressbar'

登录后复制

用例:


登录后复制

组件props

leftBg:进度条已划过部分背景色

bgc:进度条还未划过部分背景色

ballBgc:滑块背景色

width:进度条占父组件的宽度百分比,传百分比数值

height:进度条高度,传像素值

max:进度条最大值

min:最小值

value:当前值

事件

pbar-drag: 拖动进度条时触发,回传value值和百分比值

pbar-drag: 点击进度条某一位置时触发,回传value值和百分比值

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在jQuery中有关Dom元素使用方法?

在jQuery中有关Dom元素使用方法?

在jQuery中有关Dom元素使用方法?

以上就是在Vue中如何实现事件响应式进度条组件的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3187116.html

(0)
上一篇 2025年3月31日 23:05:24
下一篇 2025年3月31日 23:05:31

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 在vue里面通过父组件如何修改子组件样式

    下面我就为大家分享一篇vue里面父组件修改子组件样式的方法,具有很好的参考价值,希望对大家有所帮助。 在使用 vue 的开发中,我们有时会引用外部组件,包括 UI 组件(ElementUI、iview)。 当 标签有 scoped 属性时,…

    编程技术 2025年3月31日
    100
  • 在vue-resource中有关jsonp跨域问题

    下面我就为大家分享一篇基于vue-resource jsonp跨域问题的解决方法,具有很好的参考价值,希望对大家有所帮助。 最近在学习vue.js 碰到个ajax跨域请求的问题,之前知道可以用jsonp解决,但是一直没实践过,这次用发现里面…

    2025年3月31日 编程技术
    100
  • 在vue+webpack中如何实现异步组件加载?

    下面我就为大家分享一篇vue+webpack实现异步组件加载的方法,具有很好的参考价值,希望对大家有所帮助。 8.9更新:之前想搬迁到csdn的时候由于邀请码问题迟迟没把博客转过来,所以跑去博客园了,今天发现csdn已经帮我把文章搬过来,有…

    2025年3月31日
    100
  • 怎样使用网站生成器VuePress

    这次给大家带来怎样使用网站生成器VuePress,使用网站生成器VuePress的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是VuePress VuePress由两部分组成:一个基于Vue的轻量级静态网站生成器,以及为编写技术文…

    编程技术 2025年3月31日
    100
  • Vue Mixin功能使用案例详解

    这次给大家带来Vue Mixin功能使用案例详解,Vue Mixin功能使用案的注意事项有哪些,下面就是实战案例,一起来看一下。 vuejs 官方组织里有一个 ‘vue-class-component’ 以及连带推荐…

    编程技术 2025年3月31日
    100
  • vue iview做出动态路由

    这次给大家带来vue iview做出动态路由,vue iview做出动态路由的注意事项有哪些,下面就是实战案例,一起来看一下。 实现目标 客户端从服务端拿到路由和权限数据后,刷新项目的路由和菜单列表,并进行权限控制。 项目基础 基础框架: …

    编程技术 2025年3月31日
    100
  • Vue-cropper对图片进行裁剪

    这次给大家带来Vue-cropper对图片进行裁剪,Vue-cropper对图片进行裁剪的注意事项有哪些,下面就是实战案例,一起来看一下。 一:裁剪的思路: 1-1,裁剪区域:需要进行裁剪首先需要形成裁剪区域,裁剪区域的大小和我们的鼠标移动…

    2025年3月31日 编程技术
    100
  • json-server怎样做出后端数据

    这次给大家带来json-server怎样做出后端数据,json-server怎样做出后端数据的注意事项有哪些,下面就是实战案例,一起来看一下。 正开发过程中 前后端分离或者不分离 ,接口多半是之后与页面的开发 ,所以建立rest的APL的接…

    编程技术 2025年3月31日
    100
  • 在实战案例中vue组件使用

    这次给大家带来在实战案例中vue组件使用,在实战案例vue组件使用的注意事项有哪些,下面就是实战案例,一起来看一下。 z项目技术: webpack + vue + element + axois (vue-resource) + less-…

    编程技术 2025年3月31日
    100
  • 在Vue中如何实现表头和首列固定

    本篇文章主要介绍了vue多种方法实现表头和首列固定的示例代码,现在分享给大家,也给大家做个参考。 有时表格太大,滚动时信息查看不方便,需要对表格进行全局表头、首列固定, 上效果: 一、创建多个表格进行覆盖 思路:当页面滚动到临界值时,出现固…

    2025年3月31日
    100

发表回复

登录后才能评论