Javascript 获取数组中下一项的事件侦听器

Javascript 获取数组中下一项的事件侦听器,javascript,arrays,Javascript,Arrays,创建一个脚本来循环遍历数组中的项目,理想情况下是下一个和上一个项目。但是,当前脚本可以工作,它总是从零索引开始,无论当前在正在创建的“模拟模式”中显示哪个项目。全文如下: var dogs = document.querySelectorAll(".dog-div"); var dogArr = Array.prototype.slice.call(dogs); var modal = document.querySelector(".modal"); var modalTitle = doc

创建一个脚本来循环遍历数组中的项目,理想情况下是下一个和上一个项目。但是,当前脚本可以工作,它总是从零索引开始,无论当前在正在创建的“模拟模式”中显示哪个项目。全文如下:

var dogs = document.querySelectorAll(".dog-div");
var dogArr = Array.prototype.slice.call(dogs);

var modal = document.querySelector(".modal");
var modalTitle = document.querySelector(".modal-title");
var modalImg = document.querySelector(".modal-img");
var leftArrow = document.getElementById("left-arrow");
var rightArrow = document.getElementById("right-arrow");

for (i = 0; i < dogArr.length; i++) {
    dogArr[i].addEventListener("click", function(e){
        e.preventDefault();
        modal.style.display = "block";
        modalTitle.textContent = this.dataset.dogName;
        modalImg.setAttribute("src", this.dataset.dogImage );
    })
}

function nextDog() {
  i = i + 1;
  i = i % dogArr.length;
  return dogArr[i];
}

rightArrow.addEventListener("click", function(e) {
  e.preventDefault();
  console.log(nextDog());
})
var dogs=document.queryselectoral(“.dog div”);
var dogArr=Array.prototype.slice.call(dogs);
var modal=document.querySelector(“.modal”);
var modaltle=document.querySelector(“.modal title”);
var modalImg=document.querySelector(“.modal img”);
var leftArrow=document.getElementById(“左箭头”);
var rightArrow=document.getElementById(“右箭头”);
对于(i=0;i
感谢您的指导。

试试以下方法:

var dogs = document.querySelectorAll(".dog-div");
var dogArr = Array.prototype.slice.call(dogs);

var modal = document.querySelector(".modal");
var modalTitle = document.querySelector(".modal-title");
var modalImg = document.querySelector(".modal-img");
var leftArrow = document.getElementById("left-arrow");
var rightArrow = document.getElementById("right-arrow");

function makeIterable(arr) {

  var cur = 0;
  arr.next = function () {
    return ++cur >= this.length ? false : this[cur];
  };
  arr.prev = function () {
    return --cur < 0 ? false : this[cur];
  };
  arr.cur = function () {
    return cur;
  };
  arr.setCur =  function (pos) {
    cur = pos;
  };
  return arr;
};

makeIterable(dogArr);

function clickedClassHandler(name,callback) {

    var allElements = document.body.getElementsByTagName("*");

    for(var x = 0, len = allElements.length; x < len; x++) {
        if(allElements[x].className == name) {
            allElements[x].onclick = handleClick;
        }
    }

    function handleClick() {
        var elmParent = this.parentNode;
        var parentChilds = elmParent.childNodes;
        var index = 0;

        for(var x = 0; x < parentChilds.length; x++) {
            if(parentChilds[x] == this) {
                break;
            }

            if(parentChilds[x].className == name) {
                index++;
            }
        }

        callback.call(this,index);
    }
}

clickedClassHandler("dog-div",function(index){
    dogArr.setCur(index); //here's where you set the current position of the array based on whichever item is selected.
    modal.style.display = "block";
    modalTitle.textContent = dogArr[dogArr.cur()].dataset.dogName;
    modalImg.setAttribute("src", dogArr[dogArr.cur()].dataset.dogImage );
});

rightArrow.addEventListener("click", function(e) {
  e.preventDefault();
if (dogArr.cur() < dogArr.length-1) {
  console.log(dogArr.next());
  modalTitle.textContent = dogArr[dogArr.cur()].dataset.dogName;
  modalImg.setAttribute("src", dogArr[dogArr.cur()].dataset.dogImage );
}
})

leftArrow.addEventListener("click", function(e) {
  e.preventDefault();
if (dogArr.cur() != 0) {
  console.log(dogArr.prev());
  modalTitle.textContent = dogArr[dogArr.cur()].dataset.dogName;
  modalImg.setAttribute("src", dogArr[dogArr.cur()].dataset.dogImage );
}
})
var dogs=document.queryselectoral(“.dog div”);
var dogArr=Array.prototype.slice.call(dogs);
var modal=document.querySelector(“.modal”);
var modaltle=document.querySelector(“.modal title”);
var modalImg=document.querySelector(“.modal img”);
var leftArrow=document.getElementById(“左箭头”);
var rightArrow=document.getElementById(“右箭头”);
函数makeIterable(arr){
var-cur=0;
arr.next=函数(){
return++cur>=this.length?false:this[cur];
};
arr.prev=函数(){
return--cur<0?false:此[cur];
};
arr.cur=函数(){
返回电流;
};
arr.setCur=功能(位置){
cur=pos;
};
返回arr;
};
可制作(dogArr);
函数clickedClassHandler(名称,回调){
var-allegements=document.body.getElementsByTagName(“*”);
对于(var x=0,len=allegements.length;x
每次单击按钮时,您都需要记住所单击项目的位置。

尝试以下操作:

var dogs = document.querySelectorAll(".dog-div");
var dogArr = Array.prototype.slice.call(dogs);

var modal = document.querySelector(".modal");
var modalTitle = document.querySelector(".modal-title");
var modalImg = document.querySelector(".modal-img");
var leftArrow = document.getElementById("left-arrow");
var rightArrow = document.getElementById("right-arrow");

function makeIterable(arr) {

  var cur = 0;
  arr.next = function () {
    return ++cur >= this.length ? false : this[cur];
  };
  arr.prev = function () {
    return --cur < 0 ? false : this[cur];
  };
  arr.cur = function () {
    return cur;
  };
  arr.setCur =  function (pos) {
    cur = pos;
  };
  return arr;
};

makeIterable(dogArr);

function clickedClassHandler(name,callback) {

    var allElements = document.body.getElementsByTagName("*");

    for(var x = 0, len = allElements.length; x < len; x++) {
        if(allElements[x].className == name) {
            allElements[x].onclick = handleClick;
        }
    }

    function handleClick() {
        var elmParent = this.parentNode;
        var parentChilds = elmParent.childNodes;
        var index = 0;

        for(var x = 0; x < parentChilds.length; x++) {
            if(parentChilds[x] == this) {
                break;
            }

            if(parentChilds[x].className == name) {
                index++;
            }
        }

        callback.call(this,index);
    }
}

clickedClassHandler("dog-div",function(index){
    dogArr.setCur(index); //here's where you set the current position of the array based on whichever item is selected.
    modal.style.display = "block";
    modalTitle.textContent = dogArr[dogArr.cur()].dataset.dogName;
    modalImg.setAttribute("src", dogArr[dogArr.cur()].dataset.dogImage );
});

rightArrow.addEventListener("click", function(e) {
  e.preventDefault();
if (dogArr.cur() < dogArr.length-1) {
  console.log(dogArr.next());
  modalTitle.textContent = dogArr[dogArr.cur()].dataset.dogName;
  modalImg.setAttribute("src", dogArr[dogArr.cur()].dataset.dogImage );
}
})

leftArrow.addEventListener("click", function(e) {
  e.preventDefault();
if (dogArr.cur() != 0) {
  console.log(dogArr.prev());
  modalTitle.textContent = dogArr[dogArr.cur()].dataset.dogName;
  modalImg.setAttribute("src", dogArr[dogArr.cur()].dataset.dogImage );
}
})
var dogs=document.queryselectoral(“.dog div”);
var dogArr=Array.prototype.slice.call(dogs);
var modal=document.querySelector(“.modal”);
var modaltle=document.querySelector(“.modal title”);
var modalImg=document.querySelector(“.modal img”);
var leftArrow=document.getElementById(“左箭头”);
var rightArrow=document.getElementById(“右箭头”);
函数makeIterable(arr){
var-cur=0;
arr.next=函数(){
return++cur>=this.length?false:this[cur];
};
arr.prev=函数(){
return--cur<0?false:此[cur];
};
arr.cur=函数(){
返回电流;
};
arr.setCur=功能(位置){
cur=pos;
};
返回arr;
};
可制作(dogArr);
函数clickedClassHandler(名称,回调){
var-allegements=document.body.getElementsByTagName(“*”);
对于(var x=0,len=allegements.length;x
你需要记住t的位置
var dogs = document.querySelectorAll(".dog-div");
var dogArr = Array.prototype.slice.call(dogs);
//global tracker
var currIndex=dogArr.length;

var modal = document.querySelector(".modal");
var modalTitle = document.querySelector(".modal-title");
var modalImg = document.querySelector(".modal-img");
var leftArrow = document.getElementById("left-arrow");
var rightArrow = document.getElementById("right-arrow");

for (i = 0; i < dogArr.length; i++) {
    dogArr[i].addEventListener("click", function(e){
        e.preventDefault();
        modal.style.display = "block";
        modalTitle.textContent = this.dataset.dogName;
        modalImg.setAttribute("src", this.dataset.dogImage );
        //get item index from dataset
        currIndex=this.dataset.indexNumber;
    });

   //set item index here
   dogArr[i].dataset.indexNumber=i;
}

function nextDog() {
  currIndex = currIndex + 1;
  currIndex = currIndex % dogArr.length;
  return dogArr[currIndex];
}

rightArrow.addEventListener("click", function(e) {
  e.preventDefault();
  console.log(nextDog());
})
var dogs = document.querySelectorAll(".dog-div");
var dogArr = Array.prototype.slice.call(dogs);

var modal = document.querySelector(".modal");
var modalTitle = document.querySelector(".modal-title");
var modalImg = document.querySelector(".modal-img");
var leftArrow = document.getElementById("left-arrow");
var rightArrow = document.getElementById("right-arrow");

var current = dogArr.length;

for (i = 0; i < dogArr.length; i++) {
    dogArr[i].addEventListener("click", function(){
        modal.style.display = "block";
        current = dogArr.indexOf(this);
        modalContent(this);
        this.classList.add("active");
    })
}

function modalContent(modal){
  console.log(modal);
  var dogName = modal.dataset.dogName;
  console.log(dogName);
  var dogImg = modal.dataset.dogImage;
  console.log(dogImg);
  
  modalTitle.textContent = dogName; 
  modalImg.setAttribute("src", dogImg );
}

function nextDog() {
  current = current + 1;
  current = current % dogArr.length;
  return modalContent(dogArr[current]);
}

function prevDog() {
  current = current - 1;
  current = current % dogArr.length;
  return modalContent(dogArr[current]);
}

rightArrow.addEventListener("click", function() {
  nextDog();
})

leftArrow.addEventListener("click", function() {
    prevDog();
})