【问题标题】:How to combine 2 javascript codes in one?如何将 2 个 javascript 代码合二为一?
【发布时间】:2019-04-24 09:39:12
【问题描述】:

我以某种方式组装了 2 个单独的代码(绝对是初学者)并尝试将两个代码块合二为一。

我尝试了以下操作:当我向下滚动时,导航应该被隐藏,当我向上滚动时,它应该再次出现。

附加:只要将鼠标移到它上面(.nav-visibility),导航应该会再次出现并在鼠标移出时再次消失。 -> 但前提是您向下滚动!

问题:当您向下滚动时,导航消失 = 这很棒。但是一旦你再次向上滚动,它就不再出现了。

var zero = 0;
$(document).ready(function() {
  $(window).on('scroll', function() {
    $('.nav-visibility').css("opacity", "0", $(window).scrollTop() >
      zero);
    zero = $(window).scrollTop();
  })
})
$('nav').mouseover(function() {
  $('.nav-visibility').css("opacity", "1");
  $('.nav-visibility').css("visibility", "visible");
});

$('nav').mouseout(function() {
  $('.nav-visibility').css("opacity", "0");
  $('.nav-visibility').css("visibility", "hidden");
});

【问题讨论】:

  • 这并不奇怪,因为您的代码只是使导航不可见(不透明度 0)以响应 any 滚动事件。
  • 另外我不确定zero 变量在做什么——你在传递给.css 的第三个参数中使用它,但我从未使用超过2 个参数,并且不能在 documentation 中找到任何提及第三个参数的内容
  • $('.nav-visibility').css("opacity", $(window).scrollTop() > 0 ? "0" : "1")
  • 感谢您的回复!在这种情况下,导航仅在您位于网站顶部时出现,这实际上要好得多,但不幸的是,当我将鼠标悬停在导航上一次时,它会永远消失......我猜这两个代码之间存在冲突
  • 是的,我正在回复您的“问题:”声明。要包含其他代码,您需要将visibility 代码添加到滚动事件(或从鼠标事件中移除)

标签: javascript jquery scroll combinations visibility


【解决方案1】:

问题 1:当您向下滚动时,导航消失 = 这很棒。但是一旦你再次向上滚动,它就不再出现了。

这是因为每次滚动都会重置zero 点:

zero = $(window).scrollTop();

因为您只希望它位于顶部,因此无需重置零点。

对.css 的调用也存在问题,在这种用法下,它只需要 2 个参数 - 所以第二个需要根据滚动位置为“0”或“1”,给出:

$(document).ready(function() {
  $(window).on('scroll', function() {
    $('.nav-visibility').css("opacity", $(window).scrollTop() > 0 ? "0" : "1");
  })
})

问题 2:当我在导航上悬停一次时,导航永远消失

在这种情况下,悬停代码不仅会更改opacity,还会更改visibility - 因此滚动会更改不透明度,但不会更改可见性,使其不可见。

根据您的要求,您可以删除可见性部分,以便滚动和悬停进行相同的更改:

$('nav').mouseover(function() {
  $('.nav-visibility').css("opacity", "1");
});

$('nav').mouseout(function() {
  $('.nav-visibility').css("opacity", "0");
});

当然,如果您在顶部取消悬停,它也会消失,因此您可以添加该检查:

$('nav').mouseout(function() {
  if ($(window).scrollTop() > 0) {
    $('.nav-visibility').css("opacity", "0");
  }
});

【讨论】:

  • 太棒了!它就像一个魅力。 1 个小问题:我如何为底部做同样的事情?我尝试使用以下代码,但不幸的是不起作用...:$(window).scroll(function() { if($(window).scrollTop() + $(window).height() == $(document).height()) { $('.nav-visibility').css("opacity", "1"); } });
  • @jkr137 您应该尝试调试以了解发生了什么 - 在浏览器调试器中,或者可能使用滚动事件,使用 console.log() 来查看每个值是什么以及为什么它们不要加起来
  • @MarcoS 已经接受并感谢您的大力支持和贡献
  • @freedomn-m 再次感谢您的好回答!好的,我会再试一次...
猜你喜欢
  • 2022-08-17
  • 1970-01-01
  • 2019-09-11
  • 2012-10-30
  • 1970-01-01
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多