如何在 window.innerheight 中滚动 50% 的视口高度

how to scroll 50% of viewport height in window.innerheight

这就是我的完整 js 代码:

//init hammer function
var element=document.getElementById('pinwall-grid');
var hammertime=Hammer(element).on("drag", function(event) {
  direction=event.gesture.direction;
  if(direction == 'left')
  {
    var $meN=$('.pinwall-grid .ctrl a.next');

    if(!$meN.hasClass("nextD"))
    {
      $meN.trigger('click');
    }

    console.log('left');
  }
  else if(direction == 'right')
  {
    var $meP=$('.pinwall-grid .ctrl a.prev');

    if(!$meP.hasClass("prevD"))
    {
      $meP.trigger('click');
    }

    console.log('right');
  }
  else if(direction == 'up')
  {
    window.scroll({
      top: (window.innerHeight/2),
      left: 0,
      behavior: 'smooth'
    });

    console.log('down')
  }
  else if(direction == 'down')
  {
    window.scroll({
      top: (window.innerHeight/ -2),
      left: 0,
      behavior: 'smooth'
    });

    console.log('up')
  }

  event.gesture.stopDetect();
});

这里的问题是,当您向上或向下滑动时,它只会滚动 1 次,但是当我添加一个静态值(如 -300 而不是 ( window.innerHeight / -2 ) 时,它会完美运行。

知道我可以用什么代替 ( window.innerHeight / 2 ) 每次向上或向下滑动时滚动 50vh。

注意:我添加了 console.log 来检查每次向下或向上滑动时它是否读取代码,它是。

我猜这是一个测量问题。

查看 http://86.62.248.112/en/(手机上的最新消息滑块)以了解我在说什么

window.scroll 将文档滚动到指定位置。一旦到达那里,重复相同的滚动请求应该没有效果。

window.scrollBy 按指定量滚动。结束位置相对于开始位置,重复调用应该继续滚动(如果文档足够大)。

我假设 "add a static value to the scroll position" 在对 window.scroll 的调用中使用意味着您更新了滚动到的位置 - 结果文档滚动了添加的量。

尝试使用 window.scrollBy