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 相关文章推荐
javascript 弹出层组件(升级版)
May 12 Javascript
jQuery中$.get、$.post、$.getJSON和$.ajax的用法详解
Nov 19 Javascript
jQuery数据缓存用法分析
Feb 20 Javascript
javascript省市级联功能实现方法实例详解
Oct 20 Javascript
jQuery动画效果相关方法实例分析
Dec 31 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
Apr 29 Javascript
js实现HashTable(哈希表)的实例分析
Nov 21 Javascript
整理关于Bootstrap表单的慕课笔记
Mar 29 Javascript
JavaScript中offsetWidth的bug及解决方法
May 17 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
Jul 31 Javascript
JavaScript实现修改伪类样式
Nov 27 Javascript
对Vue table 动态表格td可编辑的方法详解
Aug 28 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/06/26 PHP
PHP中date与gmdate的区别及默认时区设置
2014/05/12 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
php中关于长度计算容易混淆的问题分析
2016/05/27 PHP
PHP实现八皇后算法
2019/05/06 PHP
JavaScript Timer实现代码
2010/02/17 Javascript
js利用与或运算符优先级实现if else条件判断表达式
2010/04/15 Javascript
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
jquery时间下拉框小例子
2013/04/15 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
jquery对Json的各种遍历方法总结(必看篇)
2016/09/29 Javascript
js 能实现监听F5页面刷新子iframe 而父页面不刷新的方法
2016/11/09 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
2017/04/25 Javascript
Vue.js教程之axios与网络传输的学习实践
2017/04/29 Javascript
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
Python语法快速入门指南
2015/10/12 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
2016/06/14 Python
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
详解python中的 is 操作符
2017/12/26 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
在Django中实现添加user到group并查看
2019/11/18 Python
关于五一放假的通知
2015/08/18 职场文书
反邪教教育心得体会
2016/01/15 职场文书