el-slider实现一个能拖动的时间范围选择器

<template>
  <div style="width: 200px">
    <el-slider
      v-model="workTime"
      :step="5"
      :max="1435"
      :marks="marks"
      :format-tooltip="formatTime"
      @input="getTime"
    >
    </el-slider>
  </div>
</template>

<script>
export default {
  name: 'aaa',
  components: {},
  props: {},
  computed: {},
  watch: {},
  filters: {},
  data() {
    return {
      workTime: 0,
      marks: {
        0: '00:00',
        720: {
          style: {
            color: '#1989FA'
          },
          label: '12:00'
        },
        1435: {
          label: this.$createElement('strong', '23:55')
        }
      },
    }
  },
  methods: {
    /**
     * @Event 分钟转成时间(如:06:05)
     * params: val(分钟)
     * @author: mhf
     * @time: 2024-01-31 14:17:54
     **/
    formatTime(val) {
      const hour = Math.floor(val / 60).toString().padStart(2, '0');
      const min = (val % 60).toString().padStart(2, '0');
      console.log(`${hour}:${min}`)
      return `${hour}:${min}`;
    },

    getTime(e) {
      this.formatTime(e)
    }
  },
  created() {
  },
  mounted() {
  },
  destroyed() {
  }
}
</script>

<style lang="scss" scoped></style>

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 HTML、CSS 和 JavaScript 实现一个类似 Element UI 的滑块组件。以下是一个简单的示例: HTML: ``` <div class="el-slider"> <div class="el-slider__bar"></div> <div class="el-slider__button"></div> </div> ``` CSS: ``` .el-slider { position: relative; height: 6px; width: 100%; background-color: #e5e5e5; } .el-slider__bar { position: absolute; top: 50%; transform: translateY(-50%); height: 2px; width: 100%; background-color: #409EFF; } .el-slider__button { position: absolute; top: 50%; left: 0; transform: translateY(-50%); height: 16px; width: 16px; border-radius: 50%; background-color: #fff; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); cursor: pointer; } ``` JavaScript: ``` const slider = document.querySelector('.el-slider'); const bar = slider.querySelector('.el-slider__bar'); const button = slider.querySelector('.el-slider__button'); let isDragging = false; function updateButtonPosition(percent) { button.style.left = `${percent}%`; } function updateBarWidth(percent) { bar.style.width = `${percent}%`; } function updateValue(percent) { const min = parseFloat(slider.getAttribute('data-min')) || 0; const max = parseFloat(slider.getAttribute('data-max')) || 100; const value = (max - min) * percent / 100 + min; slider.setAttribute('data-value', value); slider.dispatchEvent(new Event('input')); } function handleMouseDown(event) { isDragging = true; } function handleMouseMove(event) { if (isDragging) { const rect = slider.getBoundingClientRect(); const percent = Math.max(0, Math.min(100, (event.clientX - rect.left) / rect.width * 100)); updateButtonPosition(percent); updateBarWidth(percent); updateValue(percent); } } function handleMouseUp(event) { isDragging = false; } button.addEventListener('mousedown', handleMouseDown); document.addEventListener('mousemove', handleMouseMove); document.addEventListener('mouseup', handleMouseUp); ``` 以上代码实现一个基本的滑块组件,可以拖动滑块按钮来改变其值,并且会触发 `input` 事件。需要注意的是,这里使用了 `data-min` 和 `data-max` 属性来设置滑块的最小值和最大值,使用了 `data-value` 属性来设置当前的值(通过 `input` 事件更新)。可以在 HTML 中动态设置这些属性来初始化滑块组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值