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 相关文章推荐
Ext对基本类型的扩展 ext,extjs,format
Dec 25 Javascript
ExtJS自定义主题(theme)样式详解
Nov 18 Javascript
JS数组的遍历方式for循环与for...in
Jul 31 Javascript
jquery用offset()方法获得元素的xy坐标
Sep 06 Javascript
原生js实现无限循环轮播图效果
Jan 20 Javascript
JS实现的简单图片切换功能示例【测试可用】
Feb 14 Javascript
JavaScript实现的选择排序算法实例分析
Apr 14 Javascript
vue实现全选和反选功能
Aug 31 Javascript
jQuery与vue实现拖动验证码功能
Jan 30 jQuery
Javascript作用域和作用域链原理解析
Mar 03 Javascript
weui上传多图片,压缩,base64编码的示例代码
Jun 22 Javascript
浅谈Ant Design Pro 菜单自定义 icon
Nov 17 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
frename PHP 灵活文件命名函数 frename
2009/09/09 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
Yii2-GridView 中让关联字段带搜索和排序功能示例
2017/01/21 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
JavaScript 动态添加表格行 使用模板、标记
2009/10/24 Javascript
js拖拽一些常见的思路方法整理
2014/03/19 Javascript
通过JS来动态的修改url,实现对url的增删查改
2014/09/01 Javascript
BootStrap 附加导航组件
2016/07/22 Javascript
微信小程序 数据访问实例详解
2016/10/08 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
jQuery实现下拉菜单的实例代码
2017/06/19 jQuery
详解vue-cli中配置sass
2017/06/21 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
vue  directive定义全局和局部指令及指令简写
2018/11/20 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
python client使用http post 到server端的代码
2013/02/10 Python
Python实现的一个找零钱的小程序代码分享
2014/08/25 Python
python实现从web抓取文档的方法
2014/09/26 Python
在centos7中分布式部署pyspider
2017/05/03 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
sklearn+python:线性回归案例
2020/02/24 Python
CSS3实现全景图特效示例代码
2018/03/26 HTML / CSS
Rossignol金鸡美国官网:始于1907年法国百年雪具品牌
2019/03/06 全球购物
安全生产中长期规划实施方案
2014/02/21 职场文书
我的教育故事演讲稿
2014/05/04 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书