当前位置: 首页 > 面试题库 >

使用jQuery同步滚动?

詹联
2023-03-14
问题内容

我正在尝试DIV使用以下代码实现两个的同步滚动。

$(document).ready(function() {
    $("#div1").scroll(function () { 
        $("#div2").scrollTop($("#div1").scrollTop());
    });
    $("#div2").scroll(function () { 
        $("#div1").scrollTop($("#div2").scrollTop());
    });
});

#div1并且#div2说内容相同但大小不同

#div1 {
 height : 800px;
 width: 600px;
}
#div1 {
 height : 400px;
 width: 200px;
}

有了这段代码,我面临两个问题。

1)滚动没有很好地同步,因为div的大小不同。我知道,这是因为我直接设置该scrollTop值。我需要找到滚动内容的百分比并scrollTop为另一个计算相应的值div。我不确定如何找到实际高度和当前滚动位置。

2)仅在中发现此问题firefox。在firefox中,滚动不像其他浏览器那样平滑。我认为这是因为上面的代码创建了滚动事件的无限循环。我不确定,为什么只有Firefox才发生这种情况。有没有办法找到滚动事件的来源,以便我可以解决此问题。

任何帮助将不胜感激。


问题答案:

您可以element.scrollTop / (element.scrollHeight - element.offsetHeight)用来获取百分比(它将是0和之间的一个值1)。因此,您可以将其他元素(.scrollHeight - .offsetHeight)与此值乘以进行比例滚动。

为了避免在循环中触发侦听器,您可以暂时取消绑定该侦听器,设置scrollTop并重新绑定。

var $divs = $('#div1, #div2');
var sync = function(e){
    var $other = $divs.not(this).off('scroll'), other = $other.get(0);
    var percentage = this.scrollTop / (this.scrollHeight - this.offsetHeight);
    other.scrollTop = percentage * (other.scrollHeight - other.offsetHeight);
    // Firefox workaround. Rebinding without delay isn't enough.
    setTimeout( function(){ $other.on('scroll', sync ); },10);
}
$divs.on( 'scroll', sync);


 类似资料:
  • 问题内容: 我可以使用jQuery AJAX API并进行同步调用吗? 问题答案: 就像奥巴马会说的:是的,您可以! jQuery .ajax() 设置 在.ajax()处理函数中将完成此操作。

  • 问题内容: 像许多其他网站一样,我的网站使用的是jQuery。打开开发人员工具时,我看到一条警告,指出XMLHTTPRequest是 不推荐使用,因为它对最终用户的体验有不利影响。 我继续阅读了部分文档,但这是相当技术性的。有人可以简单地解释从XMLHTTPRequest转换为WHATWG的后果吗?它说发生在2012年。 此外,该文档还说,正在从Web平台删除工作人员外部的Synchronous

  • 问题内容: 如何使Ajax请求同步? 我有一个需要提交的表格。但是只有在用户输入正确的密码时才需要提交。 这是表单代码: 用于发送和检查密码的jQuery代码是这样的: 但是,无论ajax请求返回的值如何,该表单始终提交。我检查了其他所有内容。输入正确的密码后,arr的值将显示为“成功”,反之亦然。 如何使此请求同步?据我可以调试,请求是异步的,因此在请求完成之前先提交表单。 checkpass.

  • 我有一个元素,它本身有一个滚动条,还有一个单独的,它有一个滚动条。如何使其中一个滚动条与另一个滚动条的位置匹配? 我一直在查找获取滚动条位置的方法。 因为它们都返回不同的值,所以我必须知道它们的最大位置。

  • 我有两个线程:第一个是渲染线程,第二个线程是我处理UI动作的主线程。 我得到以下错误: ConcurrentModification异常的常见原因是迭代列表的更改,但我只在函数中读取它。唯一可能更改的地方是方法,但是和都在同步块内调用 也许我不明白。。那么这个错误是如何出现的呢? 我的代码: 谢谢你的评论!我将整理我的代码-在中添加同步块,并检查是否可以从另一个同步块调用。

  • 问题内容: 我一直在使用此功能并在很长时间内都避免在错误修复列表中出现此错误,但是我终于到达了列表的末尾,最后我必须使函数返回true / false以声明是否验证成功与否。 我正在使用ajax将某些字段与数据库中已有的字段进行比较,并且默认情况下该方法以异步方式进行操作。 我在调用中设置了一个变量,因此,调用方法没有得到响应,因此我的所有js / jquery在pageLoad上都失败了…如果我