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 相关文章推荐
jQuery 打造动态下滑菜单实现说明
Apr 15 Javascript
js以对象为索引的关联数组
Jul 04 Javascript
JavaScript图片放大技术(放大镜)实现代码分享
Nov 14 Javascript
JavaScript中数组添加值和访问值常见问题
Feb 06 Javascript
Vue.js原理分析之observer模块详解
Feb 17 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
Sep 20 jQuery
js中int和string数据类型互相转化实例
Jan 16 Javascript
js实现图片局部放大效果详解
Mar 18 Javascript
d3.js 地铁轨道交通项目实战
Nov 27 Javascript
详解微信小程序中var、let、const用法与区别
Jan 11 Javascript
JavaScript自定义超时API代码实例
Apr 30 Javascript
在antd Form表单中select设置初始值操作
Nov 02 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
利用static实现表格的颜色隔行显示的代码
2007/09/02 PHP
PHP $_FILES函数详解
2011/03/09 PHP
php模块memcache和memcached区别分析
2011/06/14 PHP
php设计模式 Template (模板模式)
2011/06/26 PHP
php实现只保留mysql中最新1000条记录
2015/06/18 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
jQuery each()方法的使用方法
2010/03/18 Javascript
jQuery源码分析-02正则表达式 RegExp 常用正则表达式
2011/11/14 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
微信小程序(应用号)开发新闻客户端实例
2016/10/24 Javascript
js动态引入的四种方法
2018/05/05 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
详细讲解用Python发送SMTP邮件的教程
2015/04/29 Python
Python操作csv文件实例详解
2017/07/31 Python
Python3 伪装浏览器的方法示例
2017/11/23 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
Django之创建引擎索引报错及解决详解
2019/07/17 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
2020/01/09 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
Python多线程thread及模块使用实例
2020/04/28 Python
HTML5 progress和meter控件_动力节点Java学院整理
2017/07/06 HTML / CSS
ALDO英国官网:加拿大女鞋品牌
2018/02/19 全球购物
法律专业应届本科毕业生求职信
2013/10/25 职场文书
采购意向书范本
2014/03/31 职场文书
婚礼秀策划方案
2014/05/19 职场文书
党员创先争优心得体会
2014/09/11 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
介绍信怎么写
2015/05/05 职场文书