vue开发拖拽进度条滑动组件


Posted in Javascript onSeptember 21, 2019

分享一个最近写的进度条滑动组件,以前都是用jq写,学会了vue,尝试着拿vue来写觉得非常简单,代码复用性很强!

效果图如下:

vue开发拖拽进度条滑动组件

vue开发拖拽进度条滑动组件

调用组件如下:

<slider :min=0 :max=100 v-model = "per"></slider>
<template>
 <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>
</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);
  }
  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{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:#409eff}
 .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:.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:.6}
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Array, Array Constructor, for in loop, typeof, instanceOf
Sep 13 Javascript
JS方法调用括号的问题探讨
Jan 24 Javascript
JS实现网站菜单拖拽移位效果的方法
Sep 24 Javascript
jQuery图片旋转插件jQueryRotate.js用法实例(附demo下载)
Jan 21 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
Dec 02 Javascript
详解Vue.js——60分钟组件快速入门(上篇)
Dec 05 Javascript
Vue 短信验证码组件开发详解
Feb 14 Javascript
javascript按钮禁用和启用的效果实例代码
Oct 29 Javascript
vue router 源码概览案例分析
Oct 09 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
Feb 17 Javascript
vue动态渲染svg、添加点击事件的实现
Mar 13 Javascript
详谈vue中router-link和传统a链接的区别
Jul 22 Javascript
layui点击弹框页面 表单请求的方法
Sep 21 #Javascript
使用vue制作滑动标签
Sep 21 #Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
Sep 21 #Javascript
Vue插件之滑动验证码
Sep 21 #Javascript
Layui tree 下拉菜单树的实例代码
Sep 21 #Javascript
layui 图片上传+表单提交+ Spring MVC的实例
Sep 21 #Javascript
layui layer select 选择被遮挡的解决方法
Sep 21 #Javascript
You might like
深入分析php之面向对象
2013/05/15 PHP
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
js使用DOM操作实现简单留言板的方法
2015/04/10 Javascript
在Node.js应用中读写Redis数据库的简单方法
2015/06/30 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
微信小程序云开发使用方法新手初体验
2019/05/16 Javascript
在layui tab控件中载入外部html页面的方法
2019/09/04 Javascript
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
Python中的类与对象之描述符详解
2015/03/27 Python
让python在hadoop上跑起来
2016/01/27 Python
用Python编写简单的微博爬虫
2016/03/04 Python
python用模块zlib压缩与解压字符串和文件的方法
2016/12/16 Python
解决uWSGI的编码问题详解
2017/03/24 Python
Python标准库inspect的具体使用方法
2017/12/06 Python
PyTorch CNN实战之MNIST手写数字识别示例
2018/05/29 Python
解决Pyinstaller 打包exe文件 取消dos窗口(黑框框)的问题
2019/06/21 Python
Django项目使用ckeditor详解(不使用admin)
2019/12/17 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
python 30行代码实现蚂蚁森林自动偷能量
2021/02/08 Python
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
电厂厂长岗位职责
2014/01/02 职场文书
中专生毕业个人鉴定
2014/02/26 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
领导班子四风对照检查材料范文
2014/09/27 职场文书
检讨书1000字
2014/10/11 职场文书
2014幼儿园中班工作总结
2014/11/10 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书