【问题标题】:How can i make a keypress action to this code?如何对此代码进行按键操作?
【发布时间】:2016-05-18 07:02:11
【问题描述】:

我是 JavaScript 和 jQuery 的新手,所以这是我的问题。我如何向此代码添加一个简单的按键操作。 就像我按右箭头一样,转到下一个图像。如果我按左箭头,转到上一张图片。 我已经查过它并自己尝试了一些东西,但我无法将任何东西集成到这个特定的代码中。

现在,我可以简单地使用另一个代码并使用灯箱画廊或其他东西,但我不希望这样,因为我已经在网站上找到了某个地方,而且我无法重来。

function showImage(smSrc, lgSrc) {
  document.getElementById('largeImg').src = smSrc;
  showLargeImagePanel();
  unselectAll();
  setTimeout(function() {
    document.getElementById('largeImg').src = lgSrc;
  }, 1)
}

function showLargeImagePanel() {
  document.getElementById('largeImgPanel').style.display = 'block';


}

function unselectAll() {

  if (document.selection)
    document.selection.empty();
  if (window.getSelection)
    window.getSelection().removeAllRanges();
}
#largeImgPanel {
  text-align: center;
  display: none;
  position: fixed;
  z-index: 100;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(100, 100, 100, 0.8);
}
<img src="./images/t_p0001.jpg" style="cursor:pointer" onclick="showImage(this.src, './images/p0001.JPG');" />
<img src="./images/t_p0002.jpg" style="cursor:pointer" onclick="showImage(this.src, './images/p0002.JPG');" />
<img src="./images/t_p0003.jpg" style="cursor:pointer" onclick="showImage(this.src, './images/p0003.JPG');" />
<img src="./images/t_p0004.jpg" style="cursor:pointer" onclick="showImage(this.src, './images/p0004.JPG');" />
<div id="largeImgPanel" onclick="this.style.display='none'">
  <img id="largeImg" style="height:100%; margin:0; padding:0;" />
</div>

【问题讨论】:

  • 我没有看到你在代码中的任何地方使用 Jquery 吗?
  • 我不使用 Jquery,我想知道是否有办法可以使用 Jquery 或 Javascript 来解决我的问题。

标签: javascript jquery html css navigation


【解决方案1】:

要使用 JQuery 检测按键,您可以将函数绑定到 keydownevent :

$(document).keydown(function(e) {
    switch(e.which) {
        case 37: // left
        break;

        case 38: // up
        break;

        case 39: // right
        break;

        case 40: // down
        break;

        default: return; // exit this handler for other keys
    }
    e.preventDefault(); // prevent the default action (scroll / move caret)
});

(取自there

要更改显示的 img,您可以执行以下操作:

$("#largeImgPanel").html('<img src="./images/t_p0001.jpg"  style="cursor:pointer"');

然后您必须实施一个系统来了解正在显示的图像,并使用此信息来确定要显示的下一个图像。

编辑:根据要求,使其通过图像:

var imgs = ["./images/t_p0001.jpg", "./images/...", etc];

var currentImg = 0;

然后在 keydown 事件处理程序中,您将拥有:

case 37: // left
if (currentImg === 0) {
    currentImg = imgs.length - 1;
}
else {
    currentImg--;
}
break;
case 39: // right
if (currentImg === imgs.length - 1) {
    currentImg = 0;
}
else {
    currentImg++;
}
break;

那么你只需要更新你的img 标签的src 属性(在切换之后):

if (e.which === 37 || e.which === 39) {
    $("#largeImgPanel>img").attr("src", imgs[currentImg]);
}

【讨论】:

  • 这正是我的问题,我已经偶然发现了这个,但我不知道如何让它通过图像。
  • 该死,我真的很困惑,我是 javascript 新手,你可能不想这样做,这也没关系,但你能告诉我为什么代码不适合我吗?我可能在这里做错了,但是当我在“showLargeImagePanel”函数之后实现代码时,页面没有显示图像。
  • 这是一个有效的小提琴:jsfiddle.net/tcq5e1zx如果您有任何问题,请告诉我
  • 非常感谢您抽出宝贵的时间来帮助我,这里有一个问题:javascript 是否将每张图片都从 html 中获取?还是我必须在 javascript 代码中插入所有照片?就像你对图像 1、2 和 3 所做的那样。
  • 我不得不说这是一个很好的脚本,但我的问题是,在 HTML 中,如果我点击一张照片,比如第 14 张照片,然后按右箭头键,它就会返回到第二张图片数组,我知道这是应该发生的,但我可以这样做,以便它从 html 读取图像并通过它们进行导航。如果我按照您的方式进行操作,我将始终必须添加 html 和 javascript,或者至少如果它会从我当前查看的图片导航到下一张,而不是从数组的开头。再次感谢您,并为您如此顽固而感到抱歉
猜你喜欢
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2016-05-25
  • 2011-05-19
相关资源
最近更新 更多