Vue3时间轴组件(时间信息收集组件)

14,701次阅读
没有评论

共计 5046 个字符,预计需要花费 13 分钟才能阅读完成。

背景

最近公司要求新增一个大屏页面,需要封装一个时间信息收集组件。通过双向绑定响应式数据,父组件监听子组件对数据的操作。最终将信息作为接口参数,请求相应的数据,渲染至页面上。

技术栈

  • Vue3(3.2.45)
  • Element-Plus(2.2.27)

  • dayjs(^1.11.7)

效果

Vue3 时间轴组件(时间信息收集组件)

其中时间轴是对 Element Plus 组件库中的 Slider 滑块组件的二次封装,使用样式穿透自定义样式,同时大家可以把 onMounted 生命周期中的代码取消注释,可以做更多的操作。我的另一篇文章也是时间轴组件的封装,不过两者略有区别,所以又单独记录一下。

代码

父组件关键代码


{{titleTime[0] }} - {{titleTime[1] }}

时间收集组件代码

关键变量介绍

这些变量实际可以对外暴露出去,也就是让父组件去定义,让组件更具灵活性。

  • optionsHour:每日小时节点配置项(可自行灵活配置)
  • optionsDay:每周天数配置项(可自行灵活配置)
  • LastDay :时间轴根据 当前时间 该变量 往前推多少天,之后 for 循环会利用该变量为 marks 赋值,并求出步进值stepValue 


// `;
// document.querySelector(“.bottom”).addEventListener(“click”, (e) => {
// if (e.target.id == “span1”) {
// console.log(“ 实况 ”);
// } else if (e.target.id == “span2”) {
// console.log(“ 预报 ”);
// }
// });
});

所遇问题

1. 由于 marks(取值范围在闭区间 0 -100)的赋值是根据 LastDay 变量计算出来的,具体来说是这段代码:

Number(((100 * j) / LastDay.value).toFixed(1));(最初是没有.toFixed(1))

这导致计算有可能存在很长的小数,由于小数的存在,又使得 watchEffect 当中的

let num = Number(value.value.toFixed(1));endTime = marks[num];(最初没有.toFixed(1))

有可能匹配不上返回 undefined。

也有尝试使用 Math 中的四舍五入或向上 / 下取整解决,但这又导致滑块对应不上步进值,最终采取了.toFixed(1)解决该问题。(.toFixed()返回值是字符串)

2. 代码中的 v -model 绑定组件必须采用别名方式,否则无效。

原文地址: Vue3 时间轴组件(时间信息收集组件)

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-11-07发表,共计5046字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)