You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PHP项目的范围滑块中仅显示存在出版物的年份?

实现仅支持存在出版物年份的滑块控件

1. 修改PHP代码,获取去重的有效年份数组

从数据库提取所有存在出版物的年份,去重排序后转为JSON格式传递给前端:

// 数据库连接等原有代码保持不变

// 查询所有去重的出版物年份并按升序排序
$query = "SELECT DISTINCT YEAR(data) AS year FROM publicacoes ORDER BY year ASC";
$stmt = $pdo->prepare($query);
$stmt->execute();
$validYears = $stmt->fetchAll(PDO::FETCH_COLUMN);

// 将年份数组转为JSON格式,供JavaScript调用
$validYearsJson = json_encode($validYears);

2. 更新JavaScript逻辑,限制滑块仅选择有效年份

修改滑块处理逻辑,让拖动时自动匹配最近的有效年份,确保选择的都是有出版物的年份:

// 接收PHP传递的有效年份数组
const validYears = <?= $validYearsJson ?>;

function updateSliderValue() {
  const slider = document.getElementById("yearSlider");
  const selectedYearDisplay = document.getElementById("selectedYearDisplay");
  
  // 找到与当前滑块值最接近的有效年份
  const closestYear = validYears.reduce((prev, curr) => {
    return Math.abs(curr - slider.value) < Math.abs(prev - slider.value) ? curr : prev;
  });
  
  // 同步更新滑块值和显示文本
  slider.value = closestYear;
  selectedYearDisplay.innerText = closestYear;
}

// 监听滑块实时拖动事件(比onchange更流畅)
document.getElementById("yearSlider").addEventListener("input", updateSliderValue);

// 页面加载时初始化显示
window.addEventListener("load", updateSliderValue);

3. 调整HTML代码

保留滑块基础属性,初始化值设为有效年份中的最大值:

<input id="yearSlider" type="range" 
  min="<?= $validYears[0] ?>" max="<?= end($validYears) ?>" 
  value="<?= end($validYears) ?>">
<span id="selectedYearDisplay"></span>

补充说明

  • 用input事件替代onchange,实现拖动过程中实时修正滑块值,提升体验
  • reduce方法快速匹配最近的有效年份,避免选中无出版物的年份
  • 页面加载时初始化显示,确保首次打开就展示正确的年份

内容的提问来源于stack exchange,提问作者xDeMoNaTiOn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:12:15