我针对多个容器div中的多个相似的子div。随后,页面滚动到第一个目标子div。
不幸的是,该页面不会滚动到第一个子div,然后停止滚动。该页面不断滚动浏览所有子div。
没有运气,我正在尝试更改此行为。我希望页面只会在第一个子div处停止滚动。
要查看我的实际问题,请单击标题中的任何年份:http://paintings.directory
当前的jQuery代码:
var $sections = $('section');
$('#index_year p, section p').on('click', function(e) {
let year = $(this).data('y');
$sections.each(function() {
let $section = $(this);
let $target = $('.' + year, $section);
if ($target.length) {
$('html, body').animate({
scrollTop: $target.offset().top - 128
}, 2000);
$section.removeClass('yearNotFound');
$section.animate({
scrollLeft: $section.scrollLeft() + $target.position().left
}, 2000);
} else {
$section.addClass('yearNotFound');
};
});
});
到目前为止,我一直没有成功尝试:
$('html, body').animate({
scrollTop: $('.class:visible:first').offset().top
}, 1000);
return, false;
,如下所示:$('html, body').animate({
scrollTop: $target.offset().top - 128
}, 2000); return, false;
$( "$target:first" )`
$('#index_year p, section p').on('click', function() {
$('html, body').animate({
scrollTop: $target.offset().top - 128
}, 2000);
});
scrollIntoView
,我只是无法想象在哪里以及如何使用它。到目前为止,它对我来说还算不上,因此我正在寻求帮助。
答案 0 :(得分:1)
我将第一个具有“ year”类的绘画存储在另一个变量中,以便在循环后继续滚动。
但是具有匹配日期的每个部分的动画必须在循环中...
$('#index_year p, section p').on('click', function(e) {
let year = $(this).data('y');
var $storedTarget;
$sections.each(function() {
let $section = $(this);
let $target = $('.' + year, $section);
if ($target.length) {
// Store the target here.
if(typeof($storedTarget) == "undefined"){
$storedTarget = $target.first(); // The first one!
}
// Animate sections left/right if there's a match
$section.animate({
scrollLeft: $section.scrollLeft() + $target.position().left
}, 1500);
$section.removeClass('yearNotFound');
} else {
$section.addClass('yearNotFound');
}
});
// Make sure there is at least a result..
if($storedTarget.length>0){
// Scrolling to the first section that has a match
$('html, body').animate({
scrollTop: $storedTarget.offset().top - 128
}, 1500);
}
});