Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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 Jquery在不可见时滚动到div,并在用户交互时停止滚动_Javascript_Jquery_Html - Fatal编程技术网

Javascript Jquery在不可见时滚动到div,并在用户交互时停止滚动

Javascript Jquery在不可见时滚动到div,并在用户交互时停止滚动,javascript,jquery,html,Javascript,Jquery,Html,如果页面当前在屏幕上不可见,我使用下面的jquery代码让页面平滑地滚动到特定的div: if (!$('#list-panel').visible(true)) { $('html, body').animate({ scrollTop: $('#article-panel').offset().top - 150}, 4000); } 这可以根据需要正常工作。我想要的是,如果用户在滚动时点击键盘或鼠标上的任何键,它应该停止滚动,以便用户可以正常交互。目前,用户必须等待滚动完全完成。

如果页面当前在屏幕上不可见,我使用下面的jquery代码让页面平滑地滚动到特定的div:

if (!$('#list-panel').visible(true)) {
    $('html, body').animate({ scrollTop: $('#article-panel').offset().top - 150}, 4000);
}
这可以根据需要正常工作。我想要的是,如果用户在滚动时点击键盘或鼠标上的任何键,它应该停止滚动,以便用户可以正常交互。目前,用户必须等待滚动完全完成。请注意,默认情况下,当您在4秒内看到代码时,我需要它缓慢平滑地滚动,但如果用户决定不等待并点击键盘或鼠标,则滚动应立即停止。

更新

对于处理多个事件,最好绑定这些事件。例如,
单击
启动动画,然后
按键
停止动画:

$('html, body').bind({
          'click' : function(){
            $('html, body').animate({ scrollTop: $('#d4').offset().top}, {duration:4000});
          },
          'keyup' : function(){
            $('html, body').stop();
          }

        }); 
对于移动设备,您可以添加点击、滑动等。。。使用jquerymobile()

代码笔

===

jqueryanimate函数有一个步骤回调,可以用来检查用户是否单击或按下某个键

为每个动画对象的每个动画属性调用的函数 元素。此功能提供了修改吐温的机会 对象在设置属性之前更改属性的值

信息

我在这里举了一个例子:

HTML

<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
<div id="d4"></div>
JS

#d1, #d2, #d3, #d4 {
  height: 300px;
  width: 100%;
}

#d1{
  background-color: red;
}

#d2{
  background-color: blue;
}

#d3{
  background-color: black;
  display: none;
}

#d4{
  background-color: yellow;
}
if ( $('#d3').css('display') == 'none' ) {

    $('html, body').animate({ scrollTop: $('#d4').offset().top}, {duration:4000,
                           step : function(){
        $('html, body').on('click',function(e){
          $('html, body').stop();
        });
    }});
}
CodePen

更新

对于处理多个事件,最好绑定这些事件。例如,
单击
启动动画,然后
按键
停止动画:

$('html, body').bind({
          'click' : function(){
            $('html, body').animate({ scrollTop: $('#d4').offset().top}, {duration:4000});
          },
          'keyup' : function(){
            $('html, body').stop();
          }

        }); 
对于移动设备,您可以添加点击、滑动等。。。使用jquerymobile()

代码笔

===

jqueryanimate函数有一个步骤回调,可以用来检查用户是否单击或按下某个键

为每个动画对象的每个动画属性调用的函数 元素。此功能提供了修改吐温的机会 对象在设置属性之前更改属性的值

信息

我在这里举了一个例子:

HTML

<div id="d1"></div>
<div id="d2"></div>
<div id="d3"></div>
<div id="d4"></div>
JS

#d1, #d2, #d3, #d4 {
  height: 300px;
  width: 100%;
}

#d1{
  background-color: red;
}

#d2{
  background-color: blue;
}

#d3{
  background-color: black;
  display: none;
}

#d4{
  background-color: yellow;
}
if ( $('#d3').css('display') == 'none' ) {

    $('html, body').animate({ scrollTop: $('#d4').offset().top}, {duration:4000,
                           step : function(){
        $('html, body').on('click',function(e){
          $('html, body').stop();
        });
    }});
}
CodePen

最好的方法是在启动动画时注册一个事件,然后注销该事件,这样随着时间的推移,元素上注册的事件就不会太多

要停止动画,可以使用以下代码

$('html, body').stop();
在任何特定事件中,它都会成为

$('html, body').on('click'), function() {
    $('html, body').stop();
}
但现在,您希望在只有动画启动时执行此操作,并且只需要调用该事件处理程序一次,这样就可以了

function stopScroll () {
        $('html, body').stop();
}

$('html, body').animate({ scrollTop: $('#article-panel').offset().top - 150}, {duration:5000}).one("click", stopScroll);
但您也希望在代码完成执行后取消注册事件

function stopScroll () {
    $('html, body').stop();
}

$('html, body').animate({ scrollTop: $('#article-panel').offset().top - 150}, {duration:5000, complete:function(){
    $('html, body').un("click", stopScroll);
}}).one("click", stopScroll);

最好的方法是在启动动画时注册一个事件,然后注销该事件,这样随着时间的推移,元素上注册的事件就不会太多

要停止动画,可以使用以下代码

$('html, body').stop();
在任何特定事件中,它都会成为

$('html, body').on('click'), function() {
    $('html, body').stop();
}
但现在,您希望在只有动画启动时执行此操作,并且只需要调用该事件处理程序一次,这样就可以了

function stopScroll () {
        $('html, body').stop();
}

$('html, body').animate({ scrollTop: $('#article-panel').offset().top - 150}, {duration:5000}).one("click", stopScroll);
但您也希望在代码完成执行后取消注册事件

function stopScroll () {
    $('html, body').stop();
}

$('html, body').animate({ scrollTop: $('#article-panel').offset().top - 150}, {duration:5000, complete:function(){
    $('html, body').un("click", stopScroll);
}}).one("click", stopScroll);


@daliaessam:你的意思是说,如果你用这个代码更改滚动条,它需要很多时间,用户必须等到到达那个地方。。。是吗?@Rejith R Krishnan不,请在评论之前阅读。我说过,如果不可见,它可以在滚动时正常工作,但如果用户执行任何操作(如敲击键盘或鼠标),我需要它停止滚动。是的,默认情况下,我需要它在4秒钟内缓慢滚动。@Parga Bhayani请阅读完整的问题,我没有看到任何不清楚的地方。@daliasessam:好的,问题现在清楚了,仍然需要澄清一件事,如果你的动画到达一半,如果用户单击,那么滚动应该立即在中途停止。。。对/@Parag Bhayani是的,你是对的。如果用户在滚动时执行任何操作,则应立即停止滚动,以便用户可以进行交互。@daliaessam:那么您的意思是,如果您使用此代码更改滚动,则需要花费大量时间,用户必须等待到达该位置。。。是吗?@Rejith R Krishnan不,请在评论之前阅读。我说过,如果不可见,它可以在滚动时正常工作,但如果用户执行任何操作(如敲击键盘或鼠标),我需要它停止滚动。是的,默认情况下,我需要它在4秒钟内缓慢滚动。@Parga Bhayani请阅读完整的问题,我没有看到任何不清楚的地方。@daliasessam:好的,问题现在清楚了,仍然需要澄清一件事,如果你的动画到达一半,如果用户单击,那么滚动应该立即在中途停止。。。对/@Parag Bhayani是的,你是对的。如果用户在滚动时执行任何操作,它应该立即停止滚动,以便用户可以进行交互。很好,使用鼠标单击。你能为鼠标滚轮、键盘、任何按钮点击、移动设备上的触摸添加事件吗?@stig js:不知道你为什么要对此进行投票,但这肯定不是一个好方法,在转换过程中会多次调用step函数,你每次都在上面注册点击事件。。。因此,过了一段时间后,您可能已经注册了数百次click events…@ParagBhayani我已经更新了答案,bind更适合于多个事件。@stig js我想要的是DOM就绪,如果div不可见,它会自动滚动到它,但如果用户在滚动时执行任何操作,如鼠标、键盘或触摸,滚动应立即停止。那么应该使用什么实现呢?您应该使用bind handlersGreat,使用鼠标单击。你能为鼠标滚轮、键盘、任何按钮点击、移动设备上的触摸添加事件吗?@stig js:不知道你为什么要为此进行投票,但这肯定不是一个好方法,在转换过程中会多次调用step函数,你正在注册click eve