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 window.setTimeout() 的详细用法
Nov 04 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
Mar 01 Javascript
JavaScript动态创建form表单并提交的实现方法
Dec 10 Javascript
javascript实现在网页中运行本地程序的方法
Feb 03 Javascript
详解js中Number()、parseInt()和parseFloat()的区别
Dec 20 Javascript
JavaScript禁止微信浏览器下拉回弹效果
May 16 Javascript
JavaScript html5 canvas实现图片上画超链接
Oct 20 Javascript
简单实现jQuery弹窗效果
Oct 30 jQuery
解决element-ui中下拉菜单子选项click事件不触发的问题
Aug 22 Javascript
JavaScript惰性求值的一种实现方法示例
Jan 11 Javascript
jquery轻量级数字动画插件countUp.js使用详解
Oct 17 jQuery
浅析Vue 中的 render 函数
Feb 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 读取大文件的X行到Y行内容的实现代码
2013/06/24 PHP
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
php和C#的yield迭代器实现方法对比分析
2019/07/17 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
说说掌握JavaScript语言的思想前提想学习js的朋友可以看看
2009/04/01 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
Javascript 按位取反运算符 (~)
2014/02/04 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
javaScript生成支持中文带logo的二维码(jquery.qrcode.js)
2017/01/03 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
JavaScript检查数据中是否存在相同的元素(两种方法)
2018/10/07 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
python修改文件内容的3种方法详解
2019/11/15 Python
移动Web—CSS为Retina屏幕替换更高质量的图片
2012/12/24 HTML / CSS
HTML5新增元素如何兼容旧浏览器有哪些方法
2014/05/09 HTML / CSS
sort命令的作用和用法
2012/11/04 面试题
学期自我鉴定范文
2013/10/01 职场文书
药剂专业学生求职信范文
2013/12/28 职场文书
人力资源部培训专员岗位职责
2014/01/02 职场文书
挑战杯创业计划书的写作指南
2014/01/07 职场文书
国际经济与贸易专业求职信
2014/07/10 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
优秀工作者事迹材料
2014/12/26 职场文书
开学第一周总结
2015/07/16 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
MySQL的存储过程和相关函数
2022/04/26 MySQL