- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
请谁能帮助我解决我网站上的事件?问题是,每次滚动事件触发时,它们都会不断发生。导航菜单位于标题下方,但在滚动时始终停留在顶部,但是当我们一直向上滚动时,我希望它返回标题下方。我不知道我在做什么错。这是我的代码
var navigation = document.querySelector("nav");
var borderBottom = navigation.getAttribute("border-bottom");
var currentDistance = (document.documentElement.scrollHeight);
addEventListener ("scroll", function() {
if (currentDistance > "90px") {
navigation.style.position = "fixed";
navigation.style.top = "0";
navigation.style.borderBottom = "3px solid rgb(157,0,53)";
}
else removeEventListener ("scroll", function() {
navigation.style.position = "fixed";
navigation.style.top = "0";
navigation.style.borderBottom = "3px solid rgb(157,0,53)";
}
);
});
var flyInDiv = document.getElementById("flyInDiv");
addEventListener ("scroll", function() {
var programMenu = document.createElement("DIV");
programMenu.className = "programMenu";
programMenu.appendChild(flyInDiv);
document.body.appendChild(programMenu);
programMenu.style.position = "fixed";
});
最佳答案
我查看了您的代码和您的网站,看来您正在尝试实现以下目标:
粘性导航仅在用户滚动到标题上方时才变为粘性
用户第一次滚动并停留在那里的服务时间列表
TL; DR-我在http://jsfiddle.net/9o7frxp1/4/处做了一个包含此基本行为的jsfiddle。
在上面的小提琴中,我建议使用CSS类来控制导航的粘性和fly div的动画。 JavaScript仅用于根据用户是否滚动以及滚动位置是多少来打开和关闭这些类。
这对于区分JS和CSS的关注点非常有用,允许每种语言各自做的最好,并且这意味着代码更易于维护。
为了进一步说明问题,现在就以您的<nav>
为例,以便使这篇文章不会太长。还要查看我上面的jsfiddle链接以了解飞行div的信息-我已在代码中添加了注释,以解释正在发生的事情,但是请告诉我这是否有意义。
因此,我们有一个nav元素:
<nav id="nav">
Nav
</nav>
<nav>
提供了一些样式-一些默认样式,然后只有它们也具有
.is-sticky
类时才应用这些样式:
#nav {
width: 100%;
height: 40px;
}
#nav.is-sticky {
position: fixed;
top: 0;
}
<nav>
:
var navigation = document.getElementById('nav');
function addStickyClass() {
// Every time this function fires, we calculate the scroll position
var currentDistance = document.body.scrollTop;
// If we've scrolled 90px down, add the 'is-sticky' class to our nav.
// If not, remove the 'is-sticky' class.
if (currentDistance > 90) {
navigation.className = 'is-sticky';
} else {
navigation.className = '';
}
}
window.addEventListener('scroll', addStickyClass);
#flyInDiv
来说,代码可以更简单一些,并且不需要任何布尔值或
if
语句。在
http://jsfiddle.net/9o7frxp1/5/上用注释进行解释的小提琴
function addStickyClass() {
// Every time this function fires, we calculate the scroll position
var currentDistance = document.body.scrollTop;
// If we've scrolled 90px down, add the 'is-sticky' class to our nav.
// If not, remove the 'is-sticky' class.
if (currentDistance > 90) {
navigation.className = 'is-sticky';
} else {
navigation.className = '';
}
}
.is-sticky
类。
#flyInDiv
的显示。也许我们可以将其包含在此代码块中?
#flyInDiv
的逻辑是这样的:
.is-sticky
类,用于使元素可见,但是默认情况下,该类不在元素上:
#flyInDiv {
width: 100px;
height: 100px;
/* Positioned hard right */
position: fixed;
right: 0;
/* Translated an extra 100px to the right, sending it out of view */
transform: translateX(100px);
}
#flyInDiv.is-sticky {
/* No translation, so the element should now simply be hard right */
transform: translateX(0);
}
addStickyClass()
函数-但我将从这些示例中删除与
<nav>
相关的其他代码,以使事情更加清楚。
var flyingDiv = document.getElementById("flyInDiv");
function addStickyClass() {
flyingDiv.className = "is-sticky";
}
.is-sticky
类。每次用户滚动时,它都会保持设置状态。
#flyInDiv
上继续设置此类,这实际上是可以的,因为这仅意味着从用户首次滚动的那一刻起,它就一直保持可见状态。
.is-sticky
类。我们不需要每次用户滚动时都进行设置。
flyingDiv.className = "is-sticky";
时,它只会连续覆盖类名。结果:您的
flyingDiv
始终具有
.is-sticky
类。
appendChild()
添加一个新的,更复杂的元素在第一次滚动后进入DOM,而不是简单地使用CSS使其可见-我们绝对无法摆脱不断重复自身的代码-这意味着我们的元素不断地被添加!
false
。为什么?因为变量是
flyingDivIsVisible
(读为“ flying div是否可见?”),并且在页面上发生任何其他事情之前,正如我们已经提到的,答案应该为“否”。
#flyInDiv
是不可见的。
var flyingDivIsVisible = false;
if
块中,并且仅在
!flyingDivIsVisible
为true时运行(或者换句话说,为
flyingDivIsVisible === false
):
// Tell our code that the div isn't visible.
var flyingDivIsVisible = false;
function addStickyClass() {
// Only run this code if div isn't visible.
if (!flyingDivIsVisible) {
flyingDiv.className = "is-sticky";
// Tell our code that the div is visible
flyingDivIsVisible = true;
}
}
var flyingDivIsVisible = false;
吗?因此,至少在第一次运行此函数时,
flyingDivIsVisible === false
肯定会评估为true。
flyingDivIsVisible === false
时才运行的东西?好吧,它也恰巧改变了
flyingDivIsVisible = true
。为什么?因为运行的东西是将
.is-sticky
类添加到
#flyInDiv
,这意味着它现在是可见的-但是我们需要通过设置
flyingDivIsVisible = true
来向我们的代码提供这些知识。
flyingDivIsVisible = true
,这意味着
if (!flyingDivIsVisible)
块中的任何代码都将不再运行。
// Tell our code the div isn't visible
var flyingDivIsVisible = false;
(function () {
// Us: Is the div visible?
// Code: No. You told it me it isn't.
if (!flyingDivIsVisible) {
flyingDiv.className = "is-sticky";
// Tell our code that the div is visible
flyingDivIsVisible = true;
}
})();
(function () {
// Us: Is the div visible?
// Code: Yes. You told me it was last time I ran this function.
if (!flyingDivIsVisible) {
// Nothing in this block runs, because the div is visible.
flyingDiv.className = "is-sticky";
flyingDivIsVisible = true;
}
})();
#flyInDiv
是此代码控制的唯一内容,那么我们也可以在第一次滚动后也删除事件侦听器,以使该代码不再侦听滚动(它不需要,对吗?它已经完成了使div在第一个滚动条上可见的工作。
<nav>
显示和隐藏相同的代码上下文中想象了这一点,这仍然需要事件侦听器不断询问“用户是否在滚动?”所有时间,所以我们不想删除事件监听器。
关于javascript - 如何阻止滚动事件重复发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33157822/
我刚开始学习JSP技术,遇到了瓶颈。 如何从 JSP 声明 block ? 这不起作用: ... 服务器说没有“out”。 U: 我确实知道如何使用返回字符串的方法重写代码,但是有没有办法在 ?
在一个字段中,我想设置一个具有自定义过滤器的自定义分析器-着眼于词干-因此,“闪存卡”和“闪存卡”的词根相同,因此返回的结果相同 当我运行以下查询时,我的命中率很高,但是“闪存卡”和“闪存卡”各自返回
快速提问。 我有一个通过 PInvoke 使用 native DLL 的应用程序,这个 DLL 可能会调用 PostQuitMessage()。 如何避免? (因为我的应用程序不应该关闭) 我试过 A
一些给定的 HTML 文章,例如: Content 与一些基本的 Jquery 结合使用,例如: $(".some_
我正在构建一个灯箱相册。当第一个图像加载时,CSS 转换起作用。当加载后的每个图像都没有。任何想法为什么?加载第一张之后的照片,但没有过渡。 Image.prototype.load = functi
这个问题在这里已经有了答案: Disable recent tasks button on Android 5.0 (2 个答案) 关闭 2 年前。 我知道这个问题之前在这里被问过 Android
我是 Objective-C 的新手,我只是想弄清楚我是否可以使用 block 或选择器作为 UIAlertView 的 UIAlertViewDelegate 参数 - 哪个更合适? 我已经尝试了以
我是 Linux (UNIX) 套接字下套接字编程的新手。我在 Internet 上找到了以下代码,用于为每个连接生成一个线程的 tcp 服务器。但是它不起作用。accept() 函数立即返回,不等待
recv()库函数手册页提到: It returns the number of bytes received. It normally returns any data available, up
我有一个用于其他项目的共享 ts 库。在这个库中有被同一个库的其他资源使用的资源。该库的结构分为 components/*、interfaces/*、services/* 等目录。在每个目录的根目录中
我想在同一行中一个接一个地显示我的 ListView ,但 ListView 显示每个新行中的每个项目。我怎样才能防止换行显示。以便它显示为段落 ListView.builder( shr
我有一个包含数千行的表格。 import React from "react" import { useSelector } from "react-redux"; import { useEffec
假设我通常希望收到关于代码中不完整模式的警告,但有时我知道某个函数的模式不完整,我知道这很好。 是still true GHC 的警告粒度是每个模块的,并且没有办法更改有关特定功能或定义的警告? 最佳
我的网络应用程序发送浏览器通知,我知道如何检查通知的浏览器权限,以及如果未授予权限,如何请求权限。 但是,即使用户授予我的站点发送通知的权限,她可能仍然无法收到通知,因为它们 might be dis
我有 Xcode 3.2.1,并且喜欢使用它,但是当我编辑文本中带有超链接的文件时(例如,带有引用的注释:# see http://example.com)Xcode 将文本变成可点击的超链接。尝试编
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我有一个在 MY_Controller 中运行的 acl。如果权限被拒绝,那么此刻,我只是执行 redirect('denied') - 这是一个非常基本的 Controller ,它加载一个非常基本
我一直很好奇尝试从 Chrome 切换到 Firefox Quantum,但是对于 Web 开发遇到了一个我无法轻松解决的主要障碍——它正在缓存我的本地主机文件,因此当我尝试在本地主机加载各种 emb
这真的让我很兴奋!在任何时候,我都会参与多个项目。当我退出Xcode时,下次打开Xcode时,我前一天的所有项目都会自动一一打开。 经常我最终编辑错误的文件,AHHHHHHHHHHH!我可以阻止这种行
我的Wiki上有500个左右的Spambot和大约5个实际注册用户。我已经使用nuke删除了他们的页面,但是他们一直在重新发布。我已经使用reCaptcha控制了spambot的注册。现在,我只需要一
我是一名优秀的程序员,十分优秀!