目录
一、代码
<body>
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="https://unpkg.com/dayjs@1.8.21/dayjs.min.js"></script>
<div id="app">
<p v-time></p>
<p v-time="'HH:mm'"></p>
<p v-time="'YYYY-MM-DD HH:mm:ss'"></p>
<p v-time="'hh:mm:ss'"></p>
<p v-time="'YYYY年MM月DD日HH时mm分'"></p>
</div>
<script>
const app = Vue.createApp({})
app.directive('time', {
mounted(el, binding) {
if ('$TIMEVALLIST' in window) {
const timeList = window['$TIMEVALLIST']
window['$TIMEVALLIST'][timeList.length] = setInterval(() => {
el.innerText = dayjs(new Date()).format(binding.value || 'YYYY/MM/DD HH:mm:ss')
}, 1000)
el.setAttribute('time_val_index', timeList.length)
} else {
window['$TIMEVALLIST'] = []
window['$TIMEVALLIST'][0] = setInterval(() => {
el.innerText = dayjs(new Date()).format(binding.value || 'YYYY/MM/DD HH:mm:ss')
}, 1000)
el.setAttribute('time_val_index', 0)
}
},
unmounted(el) {
clearInterval(window['$TIMEVALLIST'][+el.getAttribute('time_val_index')])
}
})
app.mount('#app')
</script>
</body>
二、效果
这是实际效果,懒得搞动图,反正时间能跑。
总结
今天闲着随便写了个,能用是能用,好不好用不知道。说到底还是用了dayjs,存在了依赖。不过dayjs还是大部分项目中都会依赖的,亦或者是momentjs。主要是应用场景有限,可以说是几乎没有。偶尔有一个也不会想着搞个自定义指令。但是思路我还是想发出来,期待路过的大佬能评论区指点一二。