返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue实现双向滑动输入条
  • 783
分享到

Vue实现双向滑动输入条

2024-04-02 19:04:59 783人浏览 独家记忆
摘要

本文实例为大家分享了Vue实现双向滑动输入条的具体代码,供大家参考,具体内容如下 效果图如下: 组件支持传入最小值(min)最大值(max)的范围,并可设置初始最小值(initial

本文实例为大家分享了Vue实现双向滑动输入条的具体代码,供大家参考,具体内容如下

效果图如下:

组件支持传入最小值(min)最大值(max)的范围,并可设置初始最小值(initialMin)和初始最大值(initialMax)

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

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

<template>
  <div class="m-slider" ref="slider">
    <div class="u-slider-rail" @click="onClickPoint"></div>
    <div class="u-slider-track" @click="onClickPoint" :style="`left: ${left}px; right: auto; width: ${right - left}px;`"></div>
    <div class="u-slider-handle" ref="left" @mousedown="onLeftMouseDown" :style="`left: ${left}px; right: auto; transfORM: translateX(-50%);`"></div>
    <div class="u-slider-handle" ref="right" @mousedown="onRightMouseDown" :style="`left: ${right}px; right: auto; transform: translateX(-50%);`"></div>
  </div>
</template>
<script>
export default {
  name: 'Slider',
  props: {
    min: { // 滑动输入条最小值
      type: Number,
      default: 0
    },
    max: { // 滑动输入条最大值
      type: Number,
      default: 100
    },
    initialMin: { // 滑动输入条初始最小值,默认在最左侧
      type: Number,
      default: 0
    },
    initialMax: { // 滑动输入条初始最大值,默认在最右侧
      type: Number,
      default: 100
    }
  },
  data () {
    return {
      left: '', // 左滑块距离滑动条左端的距离
      right: '', // 右滑动距离滑动条左端的距离
      width: '' // 滑动输入条在页面中的宽度
    }
  },
  mounted () {
    this.width = this.$refs.slider.clientWidth
    this.left = this.initialMin * this.width / this.max
    this.right = this.initialMax * this.width / this.max
  },
  computed: {
    low () {
      return Math.round(this.left / this.width * this.max)
    },
    high () {
      return Math.round(this.right / this.width * this.max)
    }
  },
  watch: {
    low (to, from) {
      this.$emit('lowChange', to) // 左滑块对应数字回调
    },
    high (to, from) {
      this.$emit('highChange', to) // 右滑块对应数字回调
    }
  },
  methods: {
    onClickPoint (e) { // 点击滑动条,移动滑块
      var offsetLeft = this.$refs.slider.offsetLeft // 滑动条左端距离屏幕左侧的距离
      var moveX = e.clientX - offsetLeft
      if (moveX <= this.left) {
        this.left = moveX
      } else if (this.moveX >= this.right) {
        this.right = this.moveX
      } else {
        if ((moveX - this.left) < (this.right - moveX)) {
          this.left = moveX
        } else {
          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 = this.right
        } else {
          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 = this.left
        } else {
          this.right = moveX
        }
      }
      document.onmouseup = (e) => {
        document.onmousemove = null
        document.onmouseup = null
      }
    }
  }
}
</script>
<style lang="less" scoped>
.m-slider {
  height: 4px;
  position: relative;
  cursor: pointer;
  touch-action: none;
  &:hover {
    .u-slider-rail { // 灰色未选择滑动条背景色
      background: #E3E3E3;
    }
    .u-slider-track { // 蓝色已选择滑动条背景色
      background: #1890ff;
    }
  }
  .u-slider-rail { // 灰色未选择滑动条背景色
    position: absolute;
    z-index: 99;
    height: 4px;
    width: 100%;
    background: #f5f5f5;
    border-radius: 2px;
    transition: background .3s;
  }
  .u-slider-track { // 蓝色已选择滑动条背景色
    background: #91d5ff;
    border-radius: 4px;
    position: absolute;
    z-index: 99;
    height: 4px;
    cursor: pointer;
    transition: background .3s;
  }
  .u-slider-handle { // 滑块
    position: absolute;
    z-index: 999;
    width: 14px;
    height: 14px;
    margin-top: -7px;
    box-shadow: 0;
    background: #fff;
    border: 2px solid #91d5ff;
    border-radius: 50%;
    cursor: pointer;
    transition: border-color .3s,box-shadow .6s,transform .3s cubic-bezier(.18,.89,.32,1.28);
    &:hover {
      border-color: #1890ff;
    }
  }
}
</style>

②在要使用的页面引入

<div class="m-num">
    <p class="u-num">{{ low }}</p>
    <p class="u-num">{{ high }}</p>
</div>
<div class="slider">
    <Slider
        :min="0"
        :max="100"
        :initialMin="low"
        :initialMax="high"
        @lowChange="lowChange"
        @highChange="highChange"
    />
</div>
import Slider from '@/components/Slider'
components: {
    Slider
}
data () {
    return {
        low: 20,
        high: 80
    }
}
lowChange (val) {
      this.low = val
      console.log('lowChange:', val)
},
highChange (val) {
      this.high = val
      console.log('highChange:', val)
}

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

--结束END--

本文标题: Vue实现双向滑动输入条

本文链接: https://lsjlt.com/news/141174.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue实现双向滑动输入条
    本文实例为大家分享了Vue实现双向滑动输入条的具体代码,供大家参考,具体内容如下 效果图如下: 组件支持传入最小值(min)最大值(max)的范围,并可设置初始最小值(initial...
    99+
    2024-04-02
  • Vue怎么实现双向滑动输入条
    这篇“Vue怎么实现双向滑动输入条”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue怎么实现双向滑动输入条”文章吧。效果图...
    99+
    2023-06-29
  • vue实现滑动验证条
    本文实例为大家分享了vue实现滑动验证条的具体代码,供大家参考,具体内容如下 效果 代码 VerifySlider.vue <template>   <div ...
    99+
    2024-04-02
  • vue怎么实现滑动验证条
    这篇文章主要介绍“vue怎么实现滑动验证条”,在日常操作中,相信很多人在vue怎么实现滑动验证条问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么实现滑动验证条”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-29
  • React实现双滑块交叉滑动
    本文实例为大家分享了React实现双滑块交叉滑动的具体代码,供大家参考,具体内容如下 html代码: <body> <div id="root">...
    99+
    2024-04-02
  • 怎么用CSS来美化滑动输入条
    这篇文章主要为大家展示了“怎么用CSS来美化滑动输入条”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用CSS来美化滑动输入条”这篇文章吧。关于原生 inpu...
    99+
    2024-04-02
  • Android开发双向滑动选择器范围SeekBar实现
    目录一、概述二、实现2.1 首先看我们自定义View的全部代码2.2 实现流程初始化计算宽高onDraw 绘制进度条事件监听三、使用 布局文件布局文件(有刻度线)布局文件(无刻...
    99+
    2022-06-09
    选择器 选择 seekbar android开发 Android
  • JS实现滑动条案例
    本文实例为大家分享了JS实现滑动条效果的具体代码,供大家参考,具体内容如下 在完成这个案例之前需要看一下这个博客:JS案例-添加缓动画 这个案例会用到上面博客的缓动画函数。实现效果如...
    99+
    2024-04-02
  • vue中v-model双向绑定input输入框问题
    目录vue v-model双向绑定input输入框vue v-model双向绑定原理kalrry表单实现双向绑定组件上的双向绑定总结vue v-model双向绑定input输入框 ...
    99+
    2023-05-17
    vue v-model v-model双向绑定 v-model input输入框
  • iOS UICollectionView实现横向滑动
    本文实例为大家分享了iOS UICollectionView实现横向滑动的具体代码,供大家参考,具体内容如下 UICollectionView的横向滚动,目前我使用在了显示输入框的输...
    99+
    2022-05-25
    iOS 滑动
  • vue实现双向数据绑定
    本文实例为大家分享了vue实现双向数据绑定的具体代码,供大家参考,具体内容如下 vue中数组与对象采用了不同的绑定方式 1.vue对象数据绑定 (1)数据侦测 在js中,我们使用Ob...
    99+
    2024-04-02
  • Vue如何实现双向绑定
    这篇文章主要介绍Vue如何实现双向绑定,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!原理当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍...
    99+
    2024-04-02
  • Vue怎么实现下拉框双向联动效果
    今天小编给大家分享一下Vue怎么实现下拉框双向联动效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、前言在开发前端页面的...
    99+
    2023-06-29
  • VUE多个下拉框实现双向联动效果
    本文实例为大家分享了VUE多个下拉框实现双向联动的具体代码,供大家参考,具体内容如下 一、前言 在开发前端页面的时候,常常需要写下拉框,普通常见的下拉框有在页面写死固定值的下拉框,有...
    99+
    2024-04-02
  • vue实现移动端多格输入框
    近来公司提出需求,完成如下图h5页面操作。 网上没什么轮子可以使用,就自己徒手撸了一个。不多废话,直接上代码。 <div class="verify-tel"> ...
    99+
    2024-04-02
  • Android中实现水平滑动(横向滑动)ListView示例
    水平的ListView-HorizontalListView的使用 Android中ListView默认的是竖直方向的滑动,由于项目的需求,需要ListView是水平滑动的。有...
    99+
    2022-06-06
    平滑 listview Android
  • vue+Ant Design进度条滑块与input联动效果实现
     需求:滑块进度与输入框为一致,默认值为80,最小不能小于30,最大为100  子组件: <template> <div class="p...
    99+
    2022-12-08
    vue Ant Design进度条滑块 Ant Design进度条滑块与input联动 ant-design-vue 动态添加input  Ant Design进度条联动
  • Unity实现颜色渐变滑动条
    本文实例为大家分享了Unity实现颜色渐变滑动条的具体代码,供大家参考,具体内容如下 效果展示 代码 直接挂在UGUI Slider上即可 using UnityEngine;...
    99+
    2024-04-02
  • iOS实现垂直滑动条效果
    我们知道在 iOS 开发中,有一个控件经常用到,那就是滑动条(UISlider),可以满足我们滑动取值的需求。但是现在有一个需求,就是需要一个垂直的滑动条,而 UISlider 并不...
    99+
    2024-04-02
  • vue实现滑动和滚动效果
    本文实例为大家分享了vue实现滑动和滚动效果的具体代码,供大家参考,具体内容如下 面板滑动效果,父组件是resultPanel,子组件是resultOption,仿照了iview中,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作