我正在忙着建立一个页面,当评审员为每个参赛作品评分时,比赛的评分室将能够看到实时结果。
除此之外(每10秒检查一次更新),还有一个功能可以检查舞台上的当前条目(标记为绿色),这将滚动评分室的块以始终显示当前条目位于顶部页面。
然而,这会在整个时间内上下滚动创建无限循环。
初始滚动工作正常,但是因为当前项目的位置发生了变化,jQuery再次向下滚动,以便项目现在处于新的偏移量。
我的代码目前看起来像这样:
这在需要时调用该函数:
$('#entry_'+curr_entry).scrollView();
执行实际滚动的功能:
$.fn.scrollView = function () {
var item_top = $(this).offset().top;
var offset = item_top - 100;
//check if sure scrolled more than 10 seconds ago
var new_time = new Date();
var old_time = new Date(last_scrolled);
if (new_time - old_time > 10000 || last_scrolled == '') {
$('.current_section').animate({
scrollTop: offset
}, 1000);
}
使用new_time
和old_time
,以便当用户手动滚动时,此功能不会自动滚动10秒钟。
这部分有效,因此可以忽略这个问题。
我尝试使用.position()
代替.offset()
,但我得到的结果相同。
我还试图用
获取包含div的当前滚动位置$('.current_section').animate.scrollTop();
然后使用舞台上当前条目的当前位置来计算正确的滚动点,但无济于事。
理想情况下,当自动滚动时,我希望滚动项位于包含div顶部的位置100。
这个想法是在活动的电视或大显示器上,只会用来监控分数,检查一切是否正常,这就是为什么必须自动滚动。
如果我错过了一些简单的事情,请告诉我。
提前致谢。
答案 0 :(得分:1)
我设法让这个工作正常!
我在这个帖子中使用了答案来帮助我找到最终的工作代码:
How do I scroll to an element within an overflowed Div?
我的最终代码如下:
$.fn.scrollView = function () {
var parentDiv = $('.current_section');
var innerListItem = $(this);
var offset = 140;
//check if sure scrolled more than 10 seconds ago
var new_time = new Date();
var old_time = new Date(last_scrolled);
if (new_time - old_time > 10000 || last_scrolled == '') {
$('.current_section').animate({
scrollTop: parentDiv.scrollTop() + innerListItem.position().top - offset
}, 1000);
}
}
希望这可以帮助任何有类似问题的人。