<template> <div :class="{ grayscale: isGrayscale }"> <!-- 你的页面内容放在这里 --> </div>
</template>
<script>
export default { data() { return { // 存储哀悼日的数组 aidaoriDates:["0404", "0512", "0807", "0909", "1213"], , // 当前日期 currentDate: new Date() }; }, computed: { // 计算属性,判断是否应该应用灰度效果 isGrayscale() { const mm = String(this.currentDate.getMonth() + 1).padStart(2, '0'); // 月份补0 const dd = String(this.currentDate.getDate()).padStart(2, '0'); // 日期补0 const today = `${mm}${dd}`; // 组合成月份日期字符串 return this.aidaoriDates.includes(today); // 检查当前日期是否在哀悼日数组中 } }, mounted() { // 如果需要,你可以在这里设置一个定时器来每天检查是否需要应用灰度效果 // 例如,每天凌晨检查一次 // 注意:这只是一个简单示例,实际项目中可能需要更复杂的逻辑来处理日期变更和性能优化 // setInterval(() => { // this.currentDate = new Date(); // }, 86400000); // 一天后再次检查(86400000毫秒等于一天) }, watch: { // 监听currentDate的变化,并更新isGrayscale计算属性 currentDate: { handler() { this.$forceUpdate(); // 强制Vue重新渲染组件,因为currentDate是数据属性而不是响应式依赖 }, deep: true // 深度监听,因为currentDate是一个对象 } }
};
</script>
<style scoped>
.grayscale { filter: grayscale(100%); /* 根据需要添加其他浏览器特定的滤镜 */ -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)"; -o-filter: grayscale(100%);
}
</style>
效果