更改Javascript数组索引

时间:2012-10-15 20:12:36

标签: php javascript

我有一个漫画网站,它循环遍历数据库中的所有图像并将其显示为缩略图。 用户可以在viewComic.php模板上单击其中一个图像以正常大小查看。

我想让用户按左右箭头来导航图像。

所以,我的想法是:

  1. pagination.php通过循环数据库结果数组处理正确页面上的图像显示(通过偏移)。用户可以单击结果(下方)以转到viewcomic.php模板上的特定图像。

    '<br />IMG: <a href="./templates/viewcomic.php?id=' . $row['imgid'] . '&image=' . $imgpath.$row['imgname'] . '">
    
  2. 现在在viewcomic.php上,我得到并显示图像

    $imgid = $_GET['id']; 
    $imgpath = $_GET['image']; 
    <center><img src=".<?php echo  $imgpath  ?>" /></center>
    
  3. 用户可以按左右箭头浏览图像......

    问题1:Javascript是否允许您手动设置数组中的索引位置?

    由于我想允许用户获取下一张和最后一张图片,我希望他们从他们当前所在的图像(他们在pagination.php中点击的图像)开始,而不是从图像数组的开头开始。我传递了URL中的$ imgid,所以我要设置javascript img数组索引== $ imgid,这将允许用户继续滚动它们离开的图像。

    问题2:如何保留数组的当前索引

    当我想走某个方向时,它运作正常。但如果我想改变方向,我必须按两次键。我发现这是因为索引在(imgIndex ++)之后递增了我按下了键。意思是,当它开始以相反的方式运行时,它首先需要递减以将索引返回到当前图像,然后再次按下该键以最终显示下一个图像。我不知道如何解决这个问题。使用++ imgIndex也有问题,因为它会跳过图像。

    <?php
     getImages() {
    //DB connection code omitted
       $img = array();
       while($row = $catResult->fetch_assoc()) {
           $img[] = "'../images/all_comics/" . $row['imgname'] . "'";
    }
    return $img;
    ?>
    
    var imgArray = [<?php echo implode(',', getImages()) ?>];
    $(document).ready(function() {
        var img = document.getElementById("theImage");
        img.src = imgArray[0];
        var imgIndex = 0;
    
        $(document).keydown(function (e) 
        {
            //next image
            if (e.which == 39) 
            {
                if (imgIndex == imgArray.length) 
                {
                    imgIndex = 0;
                }
                img.src = imgArray[imgIndex++];
                        //now the index is ahead by 1, which is bad if you want to press <-- to get the last image because the index is ahead by 1.
            }
    
            //last image
            if (e.which == 37) 
            {
                if (imgIndex == 0) 
                {
                    imgIndex = imgArray.length;
                }
                img.src = imgArray[--imgIndex];
            }
        });
    }); 
    

    有什么想法吗?

    非常感谢!

1 个答案:

答案 0 :(得分:1)

更改操作顺序:

if (e.which == 39) {
    imgIndex++;            
    if (imgIndex>imgArray.length)  {
        imgIndex = 0;
    }
    img.src = imgArray[imgIndex];                
}