当前位置:首页 > JavaScript

js实现日历颜色

2026-02-03 00:55:53JavaScript

实现日历颜色的JavaScript方法

使用JavaScript为日历添加颜色可以通过CSS类或内联样式动态修改元素外观。以下是几种常见方法:

动态添加CSS类 通过条件判断为不同日期添加特定类名,再利用CSS定义颜色样式:

document.querySelectorAll('.calendar-day').forEach(day => {
  if (day.dataset.isHoliday === 'true') {
    day.classList.add('holiday-color');
  }
});

对应CSS:

js实现日历颜色

.holiday-color {
  background-color: #ffcccc;
  color: #d80000;
}

直接修改内联样式 适用于需要动态计算颜色的场景:

const days = document.querySelectorAll('.calendar-day');
days.forEach(day => {
  const eventCount = parseInt(day.dataset.events);
  day.style.backgroundColor = eventCount > 0 
    ? `hsl(${Math.min(eventCount * 30, 120)}, 70%, 80%)` 
    : '';
});

基于日期状态的染色逻辑

js实现日历颜色

function colorizeCalendar() {
  const today = new Date();
  const currentMonth = today.getMonth();

  document.querySelectorAll('.day-cell').forEach(cell => {
    const cellDate = new Date(cell.dataset.date);

    // 周末染色
    if ([0, 6].includes(cellDate.getDay())) {
      cell.style.backgroundColor = '#e6f7ff';
    }

    // 当前月外日期
    if (cellDate.getMonth() !== currentMonth) {
      cell.style.opacity = '0.5';
    }
  });
}

完整日历染色示例

以下是一个结合日期类型的完整实现方案:

const calendar = document.getElementById('calendar');
const events = {
  '2023-11-15': { type: 'meeting', color: '#ffeb3b' },
  '2023-11-20': { type: 'deadline', color: '#f44336' }
};

function renderCalendar() {
  // 生成日历DOM结构后执行染色
  [...calendar.querySelectorAll('[data-date]')].forEach(day => {
    const dateStr = day.dataset.date;
    const event = events[dateStr];

    // 事件日期染色
    if (event) {
      day.style.backgroundColor = event.color;
      day.style.borderLeft = `3px solid ${darkenColor(event.color, 20)}`;
    }

    // 今日标记
    if (dateStr === formatDate(new Date())) {
      day.classList.add('today-highlight');
    }
  });
}

function darkenColor(hex, percent) {
  // 颜色加深工具函数
  const r = parseInt(hex.slice(1,3), 16);
  const g = parseInt(hex.slice(3,5), 16);
  const b = parseInt(hex.slice(5,7), 16);
  return `#${[r,g,b].map(x => 
    Math.round(x * (100 - percent)/100).toString(16).padStart(2, '0')
  ).join('')}`;
}

第三方库集成方案

使用FullCalendar等库时,可通过eventRender回调实现染色:

document.addEventListener('DOMContentLoaded', function() {
  const calendarEl = document.getElementById('calendar');
  const calendar = new FullCalendar.Calendar(calendarEl, {
    eventRender: function(info) {
      if (info.event.extendedProps.priority === 'high') {
        info.el.style.backgroundColor = '#ff6b6b';
      }
    }
  });
  calendar.render();
});

注意事项

  • 颜色对比度需符合WCAG可访问性标准
  • 移动端需考虑触摸反馈颜色的变化
  • 避免使用过多颜色导致视觉混乱
  • 深色模式需提供替代配色方案

标签: 日历颜色
分享给朋友:

相关文章

vue 实现日历

vue 实现日历

实现基础日历结构 使用 Vue 的模板语法构建日历的网格布局,通常以 7 列(一周)和 5-6 行(月份天数)的表格形式展示。通过 v-for 循环渲染日期单元格,动态绑定样式和事件。 <…

uniapp怎么给标签绑定颜色

uniapp怎么给标签绑定颜色

在 uniapp 中给标签绑定颜色 在 uniapp 中,可以通过动态绑定样式或类名的方式为标签设置颜色。以下是几种常见的方法: 动态绑定内联样式 使用 :style 绑定动态样式对象,直接在…

vue实现颜色闪烁

vue实现颜色闪烁

Vue 实现颜色闪烁的方法 使用 CSS 动画和 Vue 动态绑定 通过 Vue 的动态样式绑定结合 CSS 动画实现颜色闪烁效果。定义一个 CSS 动画,通过 :style 或 :class 绑定到…

vue页面实现日历

vue页面实现日历

实现基础日历布局 使用Vue的模板语法构建日历的基本HTML结构,通常需要包含星期标题和日期格子。月份切换按钮可以通过v-on绑定事件。 <template> <div cla…

css制作日历

css制作日历

使用CSS Grid布局制作日历 日历的布局适合使用CSS Grid实现,因其天然的行列结构。以下是一个基础日历的HTML和CSS代码: <div class="calendar">…

vue实现日历组件

vue实现日历组件

Vue 日历组件实现步骤 基础结构搭建 使用Vue 3的Composition API或Options API创建组件框架。核心结构包括年份/月份切换按钮、星期标题栏和日期网格。 <temp…