javascript - 当用户单击滚动页面的 anchor 链接时,是否可以禁用 .scroll 函数?

标签 javascript jquery html css

我正在制作一个时间轴页面,我想创建一个类似于此页面右侧的年份列表的功能:https://www.mikebloomberg.com/about/

我有一个点击事件设置,当用户选择它时在日期周围添加一个圆圈边框,并在选择另一个日期时将其删除。使用这个 viewport plugin ,我也有我的页面设置,以便圆形边框出现在当前屏幕上的年份/日期周围。

我遇到的问题是,当用户单击年份并且页面滚动到正确的 anchor 时,圆形边框在列表中每年出现和消失,直到它落在正确的年份。所以基本上点击也触发了滚动功能。

我想做的是在用户单击时停止滚动功能,但在页面完成滚动到正确位置后重新开始。任何想法或建议将不胜感激!

滚动功能的脚本:

        $(window).scroll(function (){
            if($("#intro:in-viewport").length > 0){
                $('.tNavIntro').css({border: '2px solid #50b855'});
                $('.tNav2012').css({border: ''});
            }

            else if($("#time2012:in-viewport").length > 0){
                $('.tNav2012').css({border: '2px solid #50b855'});
                $('.tNavIntro').css({border: ''});
                $('.tNav2013').css({border: ''});
            }

            else if($("#time2013:in-viewport").length > 0){
                $('.tNav2013').css({border: '2px solid #50b855'});
                $('.tNavIntro').css({border: ''});
                $('.tNav2012').css({border: ''});
                $('.tNav2015').css({border: ''});
            }

            else if($("#time2015:in-viewport").length > 0){
                $('.tNav2015').css({border: '2px solid #50b855'});
                $('.tNavIntro').css({border: ''});
                $('.tNav2013').css({border: ''});
                $('.tNav2016').css({border: ''});
            }

            else if($("#time2016:in-viewport").length > 0){
                $('.tNav2016').css({border: '2px solid #50b855'});
                $('.tNavIntro').css({border: ''});
                $('.tNav2015').css({border: ''});
            }
        });

对于点击功能:

  $('.timeLineNavWrap div').on('click', function(){
        $('div.selected').removeClass('selected');
        $(this).addClass('selected');
    });

这是我最终将 clicked = false 行添加到的函数,作为解决方法将来自 anchor 的#links 从顶部的 url 中获取到位:

$(document).ready(function(){
    $('.link').on('click',function (e) {
        $('html, body').stop().animate({
            'scrollTop': $($(this).attr('rel')).offset().top
        }, 900, 'swing', function () {
            clicked = false;
        });
    });
});

最佳答案

在您的点击功能中,您可以设置某种全局状态变量来跟踪用户是否刚刚点击。如果是,您可以禁用滚动功能。 (只需将其包装在 if (!clicked) 中。)完成后,将变量设置为 false 并手动调用滚动函数。

在代码中:

var clicked = false;
$('.timeLineNavWrap div').on('click', function(){
    clicked = true;
    $('div.selected').removeClass('selected');
    $(this).addClass('selected');
    // Is there some other code here that scrolls?
    clicked = false;
    $(window).scroll();

});

$(window).scroll(function (){
    if (!clicked) {
        if($("#intro:in-viewport").length > 0){
            $('.tNavIntro').css({border: '2px solid #50b855'});
            $('.tNav2012').css({border: ''});
        }
        # etc
    }
});

关于javascript - 当用户单击滚动页面的 anchor 链接时,是否可以禁用 .scroll 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35734067/

相关文章:

javascript - D3 多线图表与工具提示转换问题

javascript - 将 JSON 从 PHP 发送到 JS

jquery - Skrollr 会突然跳动而不是平滑滚动

javascript - 如何创建 HTML+jScript 滚动触发框

javascript - 使用 JS 将类名或 ID 添加到表中

javascript - 我如何设置我的 CSS 下拉菜单,它在 "margin-top:0"时工作正常,但在 "margin-top:135"时不工作?

javascript - 添加事件监听器不工作

javascript - 将多选引导下拉选项放在 div 之外(防止滚动冒泡)

javascript - 使用 JQuery 删除空的 tbody

html - CSS 属性 background-repeat : repeat; 的必要性是什么