当前位置: 代码迷 >> JavaScript >> Javascript使用多个按钮和相同的类在按钮点击时运行2个功能
  详细解决方案

Javascript使用多个按钮和相同的类在按钮点击时运行2个功能

热度:119   发布时间:2023-06-05 16:25:34.0

我有一个投资组合网格,其中包含每个网格项目中过去工作的屏幕截图。

当前单击按钮时,它会调用一个函数来滚动屏幕截图并在到达图像底部时停止。

再次单击按钮后,我需要反转滚动。 滚动是由 setInterval 创建的。 我在单击时删除的按钮上有一类“向下”。

我有一个 if 语句无法检查“down”类是否存在并运行 scrollUp 函数。

这是一个 PHP 循环,因此有多个具有相同类的按钮。

我不能使用 jQuery。

谢谢你的帮助!

HTML:

<ul>
  <li>
  <div class="image-container overflow-hidden height-500">
      <img class="item absolute pin-t w-full h-auto pin-l" 
src="/image.jpg"/>
  </div>
    <button class="portScroll down">Scroll Down</button>
</li>

<li class="web-design-portfolio">
    <div class="image-container overflow-hidden height-500">
        <img class="item absolute pin-t w-full h-auto pin-l"
          src="/image.jpg"/>
    </div>
      <button class="portScroll down">Scroll Down</button>
  </li>
</ul>

JS:

function scrollDown() {
var portImg = this.parentNode.parentNode.querySelector('img.item');
var height = portImg.clientHeight;

var pos = 0;
var id = setInterval(frame, 5);

function frame() {
    if (pos == height - 500) {
        clearInterval(id);
    } else {
        pos++;
        portImg.style.top = - + pos + 'px';
    }
}
for (const button of document.querySelectorAll('button.portScroll')) {
    button.classList.remove('down');
}
}

for (const button of document.querySelectorAll('button.portScroll')) {
    if (button.classList.contains("down")) { 
    button.addEventListener("click", scrollDown);
    } else {
    button.addEventListener("click", scrollUp); 

    }
}

这是向下滚动的工作 Codepen:

我创建了一个函数来执行所需的操作。 我希望没问题。

function scrollUpOrDown(_this, state) {
  var portImg = _this.parentNode.parentNode.querySelector('img.item');
  var height = portImg.clientHeight;

  if(state.id > -1) {
    clearInterval(state.id);
    state.dir *= -1;
  }

  if(state.pos < 0) {
    state.pos = 1;
  }
  state.id = setInterval(frame, 5);

  function frame() {
    if ((state.pos == height - 500 && state.dir > 0) || (state.pos == 0 && state.dir < 0)) {
      clearInterval(state.id);
    } else {
      state.pos += state.dir;
      portImg.style.top = -+state.pos + "px";
    }
  }
}

for (const button of document.querySelectorAll("button.portScroll")) {
  let scollingState = {
    pos: -1,
    id: -1,
    dir: 1
  };
  if (button.classList.contains("down")) {
    button.addEventListener("click", function(){
      scrollUpOrDown(this,scollingState);
    });
  }
}

如果您想知道它为什么/如何工作,请查看此代码的输出

var array = [0,1,2,3,4,5];

for(const i in array) {
  setTimeout(function(){console.log(i)}, Math.random()*1000)
}

并阅读

  相关解决方案