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 相关文章推荐
改版了网上的一个js操作userdata
Apr 27 Javascript
Javascript中的数学函数集合
May 08 Javascript
ajax 缓存 问题 requestheader
Aug 01 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
Nov 19 Javascript
JS小功能(checkbox实现全选和全取消)实例代码
Nov 28 Javascript
四种参数传递的形式——URL,超链接,js,form表单
Jul 24 Javascript
vue.js实现单选框、复选框和下拉框示例
Jul 18 Javascript
vue中遇到的坑之变化检测问题(数组相关)
Oct 13 Javascript
vue router+vuex实现首页登录验证判断逻辑
May 17 Javascript
解决node-sass偶尔安装失败的方法小结
Dec 05 Javascript
如何从0开始用node写一个自己的命令行程序
Dec 29 Javascript
jsonp格式前端发送和后台接受写法的代码详解
Nov 07 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中使用sleep函数实现定时任务实例分享
2014/08/21 PHP
php数组添加元素方法小结
2014/12/20 PHP
php中return的用法实例分析
2015/02/28 PHP
PHP自毁程序(慎用)
2015/07/09 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
Js控制弹窗实现在任意分辨率下居中显示
2013/08/01 Javascript
javascript常用方法汇总
2014/12/02 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
JavaScript里 ==与===区别详解
2016/08/16 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
JavaScript大数相加相乘的实现方法实例
2020/10/18 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
Python 变量类型及命名规则介绍
2013/06/08 Python
Python中类型关系和继承关系实例详解
2015/05/25 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
css 省略号 css3让多余的字符串消失并附加省略号的实现代码
2013/02/07 HTML / CSS
利用css3实现的简单的鼠标悬停按钮
2014/11/04 HTML / CSS
.NET概念性的面试题
2012/02/29 面试题
英语硕士生求职简历的自我评价
2013/10/15 职场文书
专科毕业生学习生活的自我评价
2013/10/26 职场文书
优秀研究生主要事迹
2014/06/03 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
党员国庆节演讲稿范文2014
2014/09/21 职场文书
撤诉申请怎么写
2015/05/19 职场文书
交流会主持词
2015/07/02 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫