【问题标题】:Image Array and Arrow Keys图像阵列和箭头键
【发布时间】:2013-08-10 13:31:03
【问题描述】:

我只是想掌握javascript,这是我从各种来源组装的脚本,足够简单,所以我可以理解它的水平。请不要太复杂,但如果你这样做,我会很感激你的小解释,不要指望我知道......

<script type="text/javascript" language="JavaScript">
imgs=Array("01.jpg","02.jpg","03.jpg","04.jpg","05.jpg");
var x=0;
document.onkeydown = checkKey;
function checkKey(e) {
    e = e || window.event;
    if (e.keyCode == '37') {
        document.getElementById("myImage").src=imgs[--x];
    }
    else if (e.keyCode == '39') {
        document.getElementById("myImage").src=imgs[++x];
    }
}
</script>

在体内……

<img id="myImage" src="01.jpg" style="width:100%">

它应该做的是制作一个适合屏幕宽度的简单图像库,可以使用箭头键从数组中的图像导航。它工作正常,至少对我来说,除了如果我尝试在 x=0 时转到上一个图像,或者从 x=4 转到下一个图像,它会无限延伸,而不是从 05 循环回到 01.jpg。 jpg,反之亦然,如我所愿。我的理论没有奏效。我只是知道一些关于这件事的点点滴滴。有谁知道对这个原始脚本进行最少修改的简单方法?

它不必看起来很专业或“漂亮”。我只是无聊,在四处尝试。也许未来的愿望是成为一名网页设计师,但现在肯定不是 :D 哦,请不要引用 JQuery 吗?当然它们可以工作,但我只想在基本层面上了解解决方案,并获得一个独立的脚本。

【问题讨论】:

  • --x++x 的递减和递增永远不会在任一方向停止,如果您希望它们换行,则在更改它们时使用模数。模是除法的余数。如果您除以数组中的总元素并取余数,它将使您保持在界限内。 x = ((x-1) + imgs.length) % imgs.lengthx = (x+1) % imgs.length

标签: javascript arrays image


【解决方案1】:
<script type="text/javascript" language="JavaScript">
imgs=Array("01.jpg","02.jpg","03.jpg","04.jpg","05.jpg");
console.log(imgs.length);
var x=0;
document.onkeydown = checkKey;
function checkKey(e) {
    e = e || window.event;
    if (e.keyCode == '37') {        
        x--;
        if(x == -1){ x = imgs.length - 1; console.log('a max'); }
        //document.getElementById("myImage").src=imgs[x];
        console.log('a '+x);

    }
    else if (e.keyCode == '39') {       
        x++;
        if(x == imgs.length){ x = 0; console.log('b max'); }
        //document.getElementById("myImage").src=imgs[x];
        console.log('b '+x);     
    }
}
</script>

相同的东西只有更小(1 行)

 i=Array("01.jpg","02.jpg","03.jpg","04.jpg","05.jpg");var x=0;document.onkeydown=checkKey;function checkKey(e){e=e||window.event;if(e.keyCode=='37'){x--;if(x==-1){x=i.length-1;}document.getElementById("myImage").src=i[x];}else if(e.keyCode=='39'){x++;if(x==i.length){x=0;}document.getElementById("myImage").src=i[x];}}

【讨论】:

  • 我确定它可以工作,但是这可以...缩小尺寸或其他什么? :D 不过还是谢谢。
【解决方案2】:

检查您的代码中是否有x == 0x == imgs.length - 1 并进行相应调整:

function checkKey(e) {
    e = e || window.event;
    if (e.keyCode == '37') {
        if (x == 0) x = imgs.length
        document.getElementById("myImage").src=imgs[--x];
    }
    else if (e.keyCode == '39') {
        if (x == imgs.length - 1) x = -1
        document.getElementById("myImage").src=imgs[++x];
    }
}

因此,在第一种情况下递减 (x--) 会将您置于最后一个索引,而在第二种情况下递增 (++x) 会将您置于 0,也就是第一个索引。

【讨论】:

  • 这样可以吗? var y=imgs.length 函数 checkKey(e) { e = e ||窗口.事件; if (e.keyCode == '37') { if (x == 0) x = y document.getElementById("myImage").src=imgs[--x]; } else if (e.keyCode == '39') { if (x == y - 1) x = -1 document.getElementById("myImage").src=imgs[++x]; } }
  • 所以您只是将imgs.length 替换为y?是的,你可以这样做。事实上,这比我的结果更值得推荐,因为您只需调用该操作一次,而不是每次。
  • 嗯......这是赞赏。但是你所说的“检查你的代码”到底是什么意思?
  • 使用if 语句检查x 是否满足其中任何一个条件。
  • '好的,明白了。你能解释一下'e = e ||窗口.事件'?我的脚本没有那个就可以工作......由于某种原因它是一条无用的行吗?我不太明白那部分,呵呵:'D
【解决方案3】:

我认为这应该可以解决问题:

<script type="text/javascript" language="JavaScript">
imgs=Array("01.jpg","02.jpg","03.jpg","04.jpg","05.jpg");
var number_of_images = imgs.length
var x=0;
document.onkeydown = checkKey;
function checkKey(e) {
    e = e || window.event;
    if (e.keyCode == '37') {
        if (x == 0) 
            x = number_of_images - 1;
        else
            x--;
    }
    else if (e.keyCode == '39') {
        if (x == (number_of_images - 1))
            x = 0;
        else
            x++;
    }
    document.getElementById("myImage").src=imgs[x];
}
</script>

【讨论】:

  • 为了简单起见,将 var number_of_images 更改为 var y,但是是的,它可以工作。谢谢:D
  • 简单会毁掉你的代码。鉴于您刚刚掌握了窍门,也掌握了正确命名变量、函数等的窍门。不要像:“这只是为了让我了解它的作用”。花几毫秒的时间给东西起有意义的名字。以后你会感激的:P
  • 也许稍后。当然,我明白你的意思,如果我做过一个大项目,我会与大量标记为“y”、“z”、“s”的无意义变量混淆,如果我做这个一种习惯,一种像内联js一样糟糕的习惯?谢谢你的提醒;那么“imgTotal”听起来如何?哦,如果你有时间,你能解释一下'e = e ||窗口.事件'?我的脚本没有那个就可以工作......我不太明白那部分ehehe:'D
  • e = e || window.event 是为了浏览器兼容性。在某些(大多数)上,事件作为参数传递给回调,在其他(我认为是 IE)上,事件是放置在窗口对象上的全局状态。
猜你喜欢
  • 2014-03-27
  • 2013-04-01
  • 2011-07-18
  • 1970-01-01
  • 2010-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-04
相关资源
最近更新 更多