Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有条件取消IE11上的滑动滚动_Javascript_Html_Scroll_Touch_Internet Explorer 11 - Fatal编程技术网

Javascript 有条件取消IE11上的滑动滚动

Javascript 有条件取消IE11上的滑动滚动,javascript,html,scroll,touch,internet-explorer-11,Javascript,Html,Scroll,Touch,Internet Explorer 11,我有一个大DIV(#screenare),在那里我渲染了几个屏幕。在图像中,假设每个小正方形都是屏幕的大小。白色方块有内容,而黑色方块是空的 screenArena的可见部分是一个正方形的大小。然后我滚动ScreenArena,在用户滑动时按顺序显示屏幕 为了利用硬件滚动的优势,顺便说一下,我使用: #screenArena { -ms-scroll-snap-type: mandatory; -ms-scroll-snap-points-x: snapInterval(0%,

我有一个大DIV(
#screenare
),在那里我渲染了几个屏幕。在图像中,假设每个小正方形都是屏幕的大小。白色方块有内容,而黑色方块是空的

screenArena
的可见部分是一个正方形的大小。然后我滚动ScreenArena,在用户滑动时按顺序显示屏幕

为了利用硬件滚动的优势,顺便说一下,我使用:

#screenArena {
    -ms-scroll-snap-type: mandatory;
    -ms-scroll-snap-points-x: snapInterval(0%, 100%);
    -ms-scroll-snap-points-y: snapInterval(0%, 100%);

    scroll-snap-type: mandatory;
    scroll-snap-points-x: snapInterval(0%, 100%);
    scroll-snap-points-y: snapInterval(0%, 100%);

    overflow:auto;
}
这与预期一样有效,因此
screenArena
有许多具有不同屏幕的“方块”,用户在每个方块中滑动和滚动捕捉

问题是:并非所有的位置都有效,有些位置是空的,所以如果我确定它是空位置,我想在运行时取消滚动事件

使用JQuery:

   $("#screenArena").scroll(function(scrollEvent) {

       if (CHECK_SQUARE_IS_EMPTY()) {
          window.console.log ("Scrolling prevented");
          var origEvent=scrollEvent.originalEvent;
          origEvent.preventDefault();
          origEvent.stopPropagation();
          return false;
       } else {
          window.console.log ("Scrolling permitted");
          return true;
       }
   });
但是,这并不能阻止滚动。不
stopPropagation
,不
preventDefault
,也不返回
false


有办法做到这一点吗

尝试了很多东西,找到了一个非常简单的解决方案,效果不错

如果在滚动事件期间,我确定正方形为空,我只需将
scrollTop
/
scrollLeft
重置为事件内的原始(初始)位置:

$("#screenArena").scroll(function(scrollEvent) {

       if (CHECK_SQUARE_IS_EMPTY()) {
          window.console.log ("Scrolling prevented");
          if (SCROLLING_UP || SCROLLING_DOWN) this.scrollTop=ORIGINAL_SCROLL_TOP_POSITION;
          if (SCROLLING_LEFT || SCROLLING_RIGHT) this.scrollLeft=ORIGINAL_SCROLL_LEFT_POSITION;
       } else {
          window.console.log ("Scrolling permitted");
       }
   });