我正在处理标题横幅,该标题横幅一开始是隐藏的,但是当用户在页面上向下滚动时出现。当用户向后滚动到页面顶部时,它应该会再次消失并继续执行直到用户退出(横幅上有一个退出按钮,该按钮会添加Cookie,因此,如果用户退出,它将不再显示)。
我遇到的问题是,当我向上滚动到页面顶部时,横幅不会再次显示,或者即使退出后横幅也将一直显示。我尝试了几种选择,但到目前为止没有任何效果。
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');
}
});
}
}
不知所措-如果有人提出任何建议,将不胜感激。谢谢!
答案 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>();
}
}