基于element-ui el-slider实现滑动限位器

这篇具有很好参考价值的文章主要介绍了基于element-ui el-slider实现滑动限位器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

应需求需要,要做一个滑动限位器,一通百度,一通谷歌,没有相对应的解决方案,所以只能自己上。过程有丢丢曲折,比较细的东西。所以耗时也长写。写出来有需要的可以参考

需求图如下:

基于element-ui el-slider实现滑动限位器,element-ui,el-slider,ui,elementui,vue.js

上面的滑块是可以在区间【50-100】之间随意切换的。左边和右边也是可以随意拉动,区间可以随意变动,上面的滑块也可以跟着区间的范围不停的在变动。当然,也是有限制的,我这边的限制是30-150。

需求拿到手,那就是开始开工了。

看了看element-ui没有现成的,只能自己用css组合啦。

废话就少说了,上代码

html模块

<div class="fov">
            <div class="all_slider">
              <div class="assist_mian">
                <div class="rel_slider" :style="{'left':moveWidata.left+'%','right':moveWidata.right+'%'}">
                  <el-slider
                    v-model="currentFov"
                    class="point"
                    :min="fovWid[0]"
                    :max="fovWid[1]"
                    @input="setNoFovUnityData()"
                    @change="getFovAngle()"
                  />
                </div>
              </div>
              <el-slider
                v-model="fovValue"
                class="slider_line"
                range
                :marks="marks"
                :min="30"
                :max="150"
                @change="getFovData()"
              />
            </div>
            <div class="show_slider">
              <div class="each_inp spe_left">
                <el-input
                  v-model="fovMin"
                  :min="Number(30)"
                  :max="Number(150)"
                  onkeyup="value=value.replace(/[^\d]/g,'')"
                  type="text"
                  class="input"
                  @change="getFovMin()"
                />
                <div class="text">最近</div>
              </div>
              <div class="each_inp spe_right">
                <div class="p_right">
                  <el-input
                    v-model="fovMax"
                    :min="Number(30)"
                    :max="Number(150)"
                    onkeyup="value=value.replace(/[^\d]/g,'')"
                    type="text"
                    class="input"
                    @change="getFovMax()"
                  />
                  <div class="text">最远</div>
                </div>
              </div>
            </div>
          </div>

css模块代码如下:


<style lang="scss" scoped>
  .assist_mian {
    width: 100%;
    padding: 0 20px;
    position: relative;
    height: 1px;
  }

  .set_title {
    padding-top: 20px;
    color: #333333;
  }

  .fov {
    padding: 8px 20px 0;
    position: relative;
    overflow: hidden;
  }
  .spe_title {
    display: flex;
  }

  .set_sum {
    flex: 1;
    padding-top: 20px;
    text-align: right;
    color: #999;
    font-size: 12px;
  }

  .number {
    color: #333333;
  }

  .show_slider {
    display: flex;
    justify-content: space-between;
    margin-top: 20px;
  }

  .each_inp {
    flex: 1;
  }

  .spe_left {
    margin-left: -20px;
  }

  .spe_right {
    position: relative;
    margin-right: -20px;
  }

  .input {
    display: block;
    width: 50px;
    height: 30px;
    margin-top: 8px;
    background: #F4F4F4;
    border-radius: 3px 3px 3px 3px;
    border: 1px solid #E9E9E9;
    text-align: center;
    color: #333;
    font-size: 12px;
  }

  .text {
    width: 50px;
    height: 30px;
    line-height: 30px;
    font-size: 12px;
    color: #666666;
    text-align: center;
  }

  .p_right {
    position: absolute;
    right: 0;
  }

  .rel_slider {
    position: absolute;
    left: 0;
    right: 0;
    top: -10px;
  }

  .input {
    ::v-deep .el-input__inner {
      font-size: 14px !important;
      color: #000000 !important;
      padding: 0;
      height: 30px;
      border: none;
      text-align: center;
    }
  }
</style>

<style lang="scss">
  .point {
    .el-slider__button {
      background: url(../../../assets/cam/icon.png) no-repeat;
      border: none;
    }

    .el-slider__runway {
      margin: 0;
      background: transparent;
    }

    .el-slider__bar {
      background: transparent;
    }
  }

  .slider_line {
    .el-slider__runway {
      margin: 10px 0 16px 0;
    }

    .el-slider__bar {
      background-color: #001B84;
    }

    .el-slider__button {
      border: 2px solid #001B84;
    }

    .el-slider__stop {
      background: transparent;
    }
  }

  .all_slider {
    position: relative;
    // padding: 0 20px;
    top: 8px;

    .el-slider__marks-text {
      color: #000;
    }
  }
</style>

样式搞定,就到了js啦。毕竟要动态变化呀。代码如下:

<script>

export default {
  data() {
    return {
      currentFov: 55, // 得到当前值
      fovValue: [50, 100],
      eachWid: (120 / 100), // 得到滑条每个位置的长度,广角
      moveWidata: { left: 0, right: 0 }, // 广角垂直视角选择
      fovWid: [60, 80], // 得到广角滑块得区域
      marks: { // 得到fov限制
        '30': '30',
        '90': '90',
        '150': '150'
      },
      fovMin: 0, // fov的最小值,input框的
      fovMax: 0,
    }
  },
  created() {
    this.getFovData() //初始化一下长度
  },
  methods: {
    // 得到fov的最小值
    getFovMin(e) {
      this.getFovRange(1, 30, 150)
    },
    // 得到fov的最大值
    getFovMax() {
      this.getFovRange(2, 30, 150)
    },
    /**
     * 得到视角fov的数据
     * type是最近还是最远
     *min 最小值
     *max 最大值
     */
    getFovRange(type, min, max) {
      if (type === 1) {
        if (+this.fovMin < min) { // 最小值输入小于最小应输入的则赋值最新值
          this.fovMin = min
          this.fovValue = [min, this.fovValue[1]]
        } else {
          this.fovValue = [+this.fovMin, this.fovValue[1]]
        }
      } else {
        if (this.fovMax > max) {
          this.fovMax = max
          this.fovValue = [this.fovValue[0], max]
        } else {
          this.fovValue = [this.fovValue[0], +this.fovMax]
        }
      }
      this.getFovData(true)
    },
    /**
     * 计算上面当前滑块的长度
     * fov视角得初始化设置
     */
    getFovData(isUnityData = false) {
      if (this.fovMin !== this.fovValue[0]) { 
        this.fovMin = this.fovValue[0]
        const wleft = (this.fovValue[0] - 30) / this.eachWid
        this.moveWidata.left = wleft
      }
      if (this.fovMax !== this.fovValue[1]) { 
        this.fovMax = this.fovValue[1]
        const wright = (150 - this.fovValue[1]) / this.eachWid
        this.moveWidata.right = wright
      }
      this.fovWid = this.fovValue
    }
  }
}
</script>

以上就是相关代码啦。

图标记得改,.point  .el-slider__button的backgroud

需要的自己复制粘贴吧。可以参考也可以自己封装,因为我的业务原因。不能封装,分开是更好的选择,所以就没有封装,实在需要就自己封装。本小秃头就不操这心了。下一篇见。啦啦啦。文章来源地址https://www.toymoban.com/news/detail-605897.html

到了这里,关于基于element-ui el-slider实现滑动限位器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • element-ui el-table 如何实现合并单元格

    el-table的组件的可以合并单元格,先定义参数span-method 方法objectSpanMethod。在方法内控制当前单元格渲染成几个单元格或者删除掉当前单元格。 比如:代码中定义:span-method=\\\"objectSpanMethod\\\" objectSpanMethod实现是在方法区,具体内容是根据变量rowSpanList 去决定当前单元格是展示还是删

    2024年02月03日
    浏览(33)
  • 基于element-ui el-dialog组件封装,可缩放+可移动的弹窗组件

    源码下载 改组件继承el-dialog组件百分之95属性,可直接对el-dialog进行替换。在项目中我的命名为: vue代码 :搞成组件,路径随意,推荐统一放在组件目录下 拖动及缩放操作js代码: 将skdialog.js注册为指令: 目录: 指令使用:(v-指令名称(SkDialogDrag)) 效果图: 注:吃水

    2024年02月03日
    浏览(44)
  • Element-ui中表格el-table图片预览效果实现(非常实用)

    🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅  文末获取源码联系 🏆先展示效果:   🏆使用的是下面这个插

    2024年02月11日
    浏览(43)
  • element-ui中的el-table实现分页多选功能

    selection-change事件:当选择项发生变化时会触发该事件(当分页切换时,选中的数据都会自动清空) 链接: https://blog.csdn.net/qq_36157085/article/details/122922678

    2024年02月17日
    浏览(34)
  • css实现图标闪烁(Element-UI el-badge标记组件为例)

    本文以Element-UI el-badge标记组件为例,实现el-badge图标的闪烁,其他html元素也可以使用此方法实现闪烁功能。 实现闪烁功能,主要用到下面3个CSS属性 1、@keyframes 利用 @keyframes 规则来创建动画。 创建动画的原理是,将一套 CSS 样式逐渐变化为另一套样式。 在动画过程中,您

    2024年02月08日
    浏览(50)
  • 【vue2】element-ui el-transfer扩展 实现多列效果一对多

    vue2 el-transfer 穿梭框实现多类别 template 复制Transfer源码中的template,并拓展我们需要的列表2和button script 这里重写了Transfer的addToLeft方法,按着element-ui的逻辑写出第二个列表的逻辑即可。源码就不做解释了,这个组件比较简单,感兴趣的朋友可以去看看 style GitHub地址

    2024年02月08日
    浏览(43)
  • 在vue项目里,Element-Ui中el-form 实现一行两个表单效果

    1.首先使用elementUi中的Layout 24分栏进行布局,将整个form表单放入24分栏里 如图所示: 2.再将需要同行显示的表单放入el-row中的el-col中去 3.然后再根据你的需求控制一下表单大小就ok啦  全部代码: 效果图如下:  

    2024年02月11日
    浏览(37)
  • element-ui的table实现滚动加载,涵el-table组件封装一份

    重点就是 a d d R o l l L i s t e n e r addRollListener a d d R o l l L i s t e n e r 函数,想快点弄上去看效果的直接弄这个函数吧 如果不在mounted中则一定要this.$nextTick(() = this.addRollListener()) 示例代码 如果你把上面的看过了;只需要在 a d d R o l l L i s t e n e r addRollListener a d d R o l l L i s t e

    2023年04月08日
    浏览(39)
  • Element-UI实现的下拉搜索树组件(el-select、el-input、el-tree组合使用)

    1、子组件封装 注意使用:正常使用 // 子组件使用 父组件调用

    2024年02月11日
    浏览(63)
  • 扩展element-ui el-upload组件,实现复制粘贴上传图片文件,带图片预览功能

    控件改造 在窗口的 el-form 控件参数中添加 @paste.native 事件,事件绑定方法名 handlePaste 也可以在其他控件中添加事件监听,看个人需求。 注意: 监听粘贴事件时,需要当前页面先获取焦点,否则无法正常监听, 可以在页面加载后调用 focus() 获取焦点 粘贴功能Js部分参考资料

    2023年04月08日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包