vue实现横向可滑动的菜单,vue 自定义滚动条

  vue实现横向可滑动的菜单,vue 自定义滚动条

  这篇文章主要为大家详细介绍了某视频剪辑软件实现双向滑动输入条,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  本文实例为大家分享了某视频剪辑软件实现双向滑动输入条的具体代码,供大家参考,具体内容如下

  效果图如下:

  组件支持传入最小值(分钟)最大值(最大)的范围,并可设置初始最小值(首字母)和初始最大值(initialMax)

  拖动滑块调整最大最小值,并可点击输入条位置,切换数值

  创建滑动输入条组件Slider.vue

  模板

  div class=m滑块ref=滑块

  div class= u-slider-rail @ click= onClickPoint /div

  div class= u-slider-track @ click= onclick point :style= ` left:$ { left } px;右:自动;宽度:$ { right-left } px` /div

  div class= u-slider-handle ref= left @ mousedown= onLeftMouseDown :style= ` left:$ { left } px;右:自动;transform:平移x(-50%);` /div

  div class= u-slider-handle ref= right @ mousedown= onRightMouseDown :style= ` left:$ { right } px;右:自动;transform:平移x(-50%);` /div

  /div

  /模板

  脚本

  导出默认值{

  名称:"滑块",

  道具:{

  最小值:{ //滑动输入条最小值

  类型:数量,

  默认值:0

  },

  最大值:{ //滑动输入条最大值

  类型:数量,

  默认值:100

  },

  initialMin: { //滑动输入条初始最小值,默认在最左侧

  类型:数量,

  默认值:0

  },

  initialMax: { //滑动输入条初始最大值,默认在最右侧

  类型:数量,

  默认值:100

  }

  },

  data () {

  返回{

  左边: ,//左滑块距离滑动条左端的距离

  右: ,//右滑动距离滑动条左端的距离

  宽度: //滑动输入条在页面中的宽度

  }

  },

  已安装(){

  this.width=这个refs.slider.clientWidth

  这个。左=这个。初始min * this。宽度/这个。最大

  这个。对=这个。初始最大值*这个。宽度/这个。最大

  },

  计算值:{

  低(){

  返回数学。圆(这个。左/这个。宽度*这个。最大)

  },

  高(){

  返回数学。圆(这个。对/这个。宽度*这个。最大)

  }

  },

  观察:{

  低(到,从){

  这个emit(lowChange ,to) //左滑块对应数字回调

  },

  高(到,从){

  这个emit(highChange ,to) //右滑块对应数字回调

  }

  },

  方法:{

  onClickPoint (e) { //点击滑动条,移动滑块

  var offsetLeft=this .$refs.slider.offsetLeft //滑动条左端距离屏幕左侧的距离

  var moveX=e.clientX - offsetLeft

  if (moveX=this.left) {

  this.left=moveX

  } else if(这个。movex=this。右){

  this.right=this.moveX

  }否则{

  如果((moveX-this。左)(这个。right-moveX)){

  this.left=moveX

  }否则{

  this.right=moveX

  }

  }

  },

  onLeftMouseDown (e) { //在滚动条上拖动左滑块

  //滑块水平方向上距离屏幕左端的距离,减去滑块距离滑动条最左端的距离:e.clientX - this .$refs.left.offsetLeft

  var offsetLeft=this .$refs.slider.offsetLeft //滑动条左端距离屏幕左侧的距离

  document.onmousemove=(e)={

  var moveX=e.clientX - offsetLeft

  if (moveX 0) {

  this.left=0

  } else if (moveX=this.right) {

  左=右

  }否则{

  this.left=moveX

  }

  }

  document.onmouseup=(e)={

  document.onmousemove=null

  document.onmouseup=null

  }

  },

  onRightMouseDown (e) { //在滚动条上拖动右滑块

  ///滑块水平方向上距离屏幕左端的距离,减去滑块距离滑动条最左端的距离:e.clientX - this .$refs.left.offsetLeft

  var offsetLeft=this .$refs.slider.offsetLeft //滑动条左端距离屏幕左侧的距离

  console.log(offsetLeft:,offsetLeft)

  document.onmousemove=(e)={

  var moveX=e.clientX - offsetLeft

  if (moveX this.width) {

  this.right=this.width

  } else if (moveX=this.left) {

  这个。右=这个。左

  }否则{

  this.right=moveX

  }

  }

  document.onmouseup=(e)={

  document.onmousemove=null

  document.onmouseup=null

  }

  }

  }

  }

  /脚本

  style lang=less 范围。m滑块{

  高度:4px

  位置:相对;

  光标:指针;

  触摸-动作:无;

  :悬停{。u形滑轨{ //灰色未选择滑动条背景色

  背景:# E3E3E3

  }。u形滑块轨道{ //蓝色已选择滑动条背景色

  背景:# 1890ff

  }

  }。u形滑轨{ //灰色未选择滑动条背景色

  位置:绝对;

  z指数:99;

  高度:4px

  宽度:100%;

  背景:# f5f5f5

  边框-半径:2px

  过渡:背景。3s;

  }。u形滑块轨道{ //蓝色已选择滑动条背景色

  背景:# 91d 5 ff

  边框-半径:4px

  位置:绝对;

  z指数:99;

  高度:4px

  光标:指针;

  过渡:背景。3s;

  }。u形滑块手柄{ //滑块

  位置:绝对;

  z指数:999;

  宽度:14px

  高度:14px

  margin-top:-7px;

  方框阴影:0;

  背景:# fff

  边框:2px纯色# 91d 5 ff

  边界半径:50%;

  光标:指针;

  过渡:边框颜色。3s,框阴影。6s,变换。3s三次贝塞尔曲线(.18,89,32,1.28);

  :悬停{

  边框颜色:# 1890ff

  }

  }

  }

  /风格

  在要使用的页面引入

  div class=" m-num "

  p class=u-num{{ low }}/p

  p class=u-num{{ high }}/p

  /div

  div class=slider

  滑块

  :min=0

  :max=100

  :initialMin=低

  :initialMax=高

  @lowChange=lowChange

  @highChange=highChange

  /

  /div

  从"@/组件/滑块"导入滑块

  组件:{

  滑块

  }

  data () {

  返回{

  低:20,

  高:80

  }

  }

  lowChange (val) {

  this.low=val

  console.log(lowChange:",val)

  },

  高变化(值){

  this.high=val

  console.log(highChange:",val)

  }

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: