通过.js

时间:2019-01-09 14:05:41

标签: javascript jquery

我正在处理标题横幅,该标题横幅一开始是隐藏的,但是当用户在页面上向下滚动时出现。当用户向后滚动到页面顶部时,它应该会再次消失并继续执行直到用户退出(横幅上有一个退出按钮,该按钮会添加Cookie,因此,如果用户退出,它将不再显示)。

enter image description here

我遇到的问题是,当我向上滚动到页面顶部时,横幅不会再次显示,或者即使退出后横幅也将一直显示。我尝试了几种选择,但到目前为止没有任何效果。

function desktopHeader() {
  $(window).on('scroll', function() {
    console.log( $(this).scrollTop() );
  });

  var $headerBanner = $('.module-header-banner');

  $('.close-btn').on("click", function () {
    $.cookie("headerbanner", "exit", {expires: 2/24});
    $('.module-header-banner').addClass("exit").fadeOut();
  });

  if($.cookie('headerbanner') == null) {
    if($(window).scrollTop() > $('.site-header').height()){
      $headerBanner.addClass('active').fadeIn();
    } 

    $(window).scroll(function() {
      if($(window).scrollTop() > $('.site-header').height()){
        $headerBanner.addClass('active');
      } else if($(window).scrollTop() < $('.site-header').height()) {
        $headerBanner.removeClass('active');
      }
    });
  }
}

不知所措-如果有人提出任何建议,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

尝试在点击功能之外添加滚动事件, 这是更新的代码

public class Program
{
    private Delegate @delegate;
    private Func<object> func;

    private static Delegate GetDelegate(Expression<Action> expression)
    {
        MethodCallExpression methodCall = (MethodCallExpression) expression.Body;
        return Expression.Lambda(methodCall.Object, null).Compile();
    }

    private static Func<object> GetFunc(Expression<Action> expression)
    {
        MethodCallExpression methodCall = (MethodCallExpression) expression.Body;
        return Expression.Lambda<Func<object>>(methodCall.Object).Compile();
    }

    [GlobalSetup]
    public void Setup()
    {
        object o = new object();
        Expression<Action> expression = () => o.ToString();

        this.@delegate = Program.GetDelegate(expression);
        this.func = Program.GetFunc(expression);
    }

    [Benchmark]
    public void DelegateCompile()
    {
        object o = new object();
        Expression<Action> expression = () => o.ToString();

        Program.GetDelegate(expression);
    }

    [Benchmark]
    public void FuncCompile()
    {
        object o = new object();
        Expression<Action> expression = () => o.ToString();

        Program.GetFunc(expression);
    }

    [Benchmark]
    public void DelegateDynamicInvoke()
    {
        this.@delegate.DynamicInvoke();
    }

    [Benchmark]
    public void FuncInvoke()
    {
        this.func.Invoke();
    }

    public static void Main(string[] args)
    {
        BenchmarkRunner.Run<Program>();
    }
}