基于slider做时间选择器(三天范围内移动)

本文描述了一个需求,设计一个日期事件界面,时间轴能在指定三天范围内自动调整范围,保持在24小时内。通过计算属性处理滑块拖动,确保刻度在[-24,48]区间内,同时提供两种标记方式。最终展示了如何实现在不同情况下的滑块效果。
摘要由CSDN通过智能技术生成

先看需求:

  1. 选中日期的历史事件界面,默认显示当前天24小时的时间轴。
  2. 支持往前一天活往后一天拖动时间轴,跨天位置的时间刻度需有明显标记。
  3. 界面上仅需显示24小时刻度,时间轴拖动仅改变显示的时间刻度,比如未拖动前显示的是0~23点,往左拖动5小时后,时间刻度范围显示的就是今天6点到明天5点。

分析需求:
1.在三天范围内,那么我们可以想到最大值和最小值就是在区间[-24,48]之间,那我们可以通过min和max属性来限制最大和最小
2.但是我们在拖动的时间,始终希望刻度在24个小时内,所以最大最小值应该随着滑块的拖动值而变化,那么极限的变化就是最小值: max - 24 , 最大值,min + 24,这样我们始终可以把范围限制在24小时,但是这样就会存在,超出边界的情况
3.结合区间范[-24,48]之间,我们在结合最大和最小值

代码如下

//最小值,由最大值-24l配合上极限范围-24来决定
const selectTimeMin = computed(() => {
  const max = selectTimevalue.value[1] ?? 24;
  return Math.max(-24, max - 24);
});

const selectTimeMax = computed(() => {
  const min = selectTimevalue.value[0] ?? 0;
  return Math.min(48, min + 24);
});


const selectTimemarks = computed(() => {
  const [min, max] = selectTimevalue.value;
  let marks = {};
  // 第1种:全部展示
  // for (let i = min; i <= max; i++) {
  //   marks[i] = `${getValue(i)}`;
  //   if (i == min) marks[i] = `${prefix(i)}${getValue(i)}时`;
  //   if (i == max) marks[i] = `${prefix(i)}${getValue(i)}时`;
  // }
  
  // 第2种:只展示滑块的可读
  const prefix = (value) => {
    return value < 0 ? "昨天" : value > 24 ? "明天" : "今天";
  };
  const getValue = (value) => {
    return value < 0 ? 24 + value : value > 24 ? value - 24 : value;
  };

  marks[min] = `${prefix(min)}${getValue(min)}`;
  marks[max] = `${prefix(max)}${getValue(max)}`;
  return marks;
});

最后得出滑块效果
在这里插入图片描述

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值