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

如何使用JavaScript实现模态框弹出后按键盘方向键切换画廊图片

实现方案

实现逻辑

  • 新增键盘keydown事件全局监听
  • 每次触发按键时先判断模态框是否处于打开状态,避免未打开模态框时误触发切换
  • 识别按键编码:左方向键触发上一张,右方向键触发下一张,也可额外适配ESC键关闭模态框的常用交互

完整修改后的JavaScript代码

原有功能代码全部保留,只需新增末尾的键盘监听逻辑即可:

function openModal() {
  document.getElementById("myModal").style.display = "block";
}
function closeModal() {
  document.getElementById("myModal").style.display = "none";
}
var slideIndex = 1;
showSlides(slideIndex);
function plusSlides(n) {
  showSlides(slideIndex += n);
}
function currentSlide(n) {
  showSlides(slideIndex = n);
}
function showSlides(n) {
  var i;
  var slides = document.getElementsByClassName("mySlides");
  var dots = document.getElementsByClassName("demo");
  if (n > slides.length) {
    slideIndex = 1
  }
  if (n < 1) {
    slideIndex = slides.length
  }
  for (i = 0; i < slides.length; i++) {
    slides[i].style.display = "none";
  }
  slides[slideIndex - 1].style.display = "block";
}

// 新增键盘事件监听代码
document.addEventListener('keydown', function(event) {
  const modal = document.getElementById('myModal');
  // 仅模态框打开时响应按键
  if (modal.style.display === 'block') {
    // 左方向键:上一张
    if (event.keyCode === 37) {
      plusSlides(-1);
    }
    // 右方向键:下一张
    if (event.keyCode === 39) {
      plusSlides(1);
    }
    // 可选:ESC键关闭模态框
    if (event.keyCode === 27) {
      closeModal();
    }
  }
});

可选优化建议

  • 现有CSS中存在重复定义的.mySlides、.cursor样式,可以删除重复的冗余代码,不影响原有功能
  • 高频快速按方向键的场景下可额外添加防抖逻辑,普通使用场景不需要额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:39:03