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 相关文章推荐
动态改变textbox的宽高的js
Oct 26 Javascript
Javascript笔记一 js以及json基础使用说明
May 22 Javascript
让图片旋转任意角度及JQuery插件使用介绍
Mar 20 Javascript
JavaScript生成随机字符串的方法
Mar 19 Javascript
JS实现仿苹果底部任务栏菜单效果代码
Aug 28 Javascript
如何实现移动端浏览器不显示 pc 端的广告
Oct 15 Javascript
requireJS使用指南
Apr 27 Javascript
JavaScript必知必会(十) call apply bind的用法说明
Jun 08 Javascript
Google 地图API Map()构造器详解
Aug 06 Javascript
走进AngularJs之过滤器(filter)详解
Feb 17 Javascript
JavaScript之Blob对象类型的具体使用方法
Nov 29 Javascript
通过JS判断网页是否为手机打开
Oct 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面向对象程序设计之接口用法
2014/08/20 PHP
谈谈 PHP7新增功能
2015/12/16 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
NodeJS中利用Promise来封装异步函数
2015/02/25 NodeJs
jQuery复制节点用法示例(clone方法)
2016/09/08 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
基于JavaScript实现选项卡效果
2017/07/21 Javascript
jQuery实现倒计时功能 jQuery实现计时器功能
2017/09/19 jQuery
Javascript实现时间倒计时功能
2018/11/17 Javascript
vue全局使用axios的操作
2020/09/08 Javascript
[14:00]DOTA2国际邀请赛史上最长大战 赛后专访B神
2013/08/10 DOTA
ptyhon实现sitemap生成示例
2014/03/30 Python
python对html代码进行escape编码的方法
2015/05/04 Python
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
Python爬虫爬取美剧网站的实现代码
2016/09/03 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
Python文件的读写和异常代码示例
2017/10/31 Python
python如何生成网页验证码
2018/07/28 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
Python下简易的单例模式详解
2019/04/08 Python
Python利用多线程同步锁实现多窗口订票系统(推荐)
2019/12/22 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
python读写文件write和flush的实现方式
2020/02/21 Python
python 读取、写入txt文件的示例
2020/09/27 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
python自动化办公操作PPT的实现
2021/02/05 Python
马来西亚太阳镜、眼镜和隐形眼镜网上商店:Focus Point
2018/12/13 全球购物
银行会计职员个人的自我评价
2013/09/29 职场文书
激励口号大全
2014/06/17 职场文书
小学运动会演讲稿
2014/08/25 职场文书
2016先进工作者事迹材料
2016/02/25 职场文书
使用CSS设置滚动条样式
2022/01/18 HTML / CSS
Python使用pandas导入xlsx格式的excel文件内容操作代码
2022/12/24 Python