- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
因此,我一直在努力围绕这种名为“视差”的整洁效果。基本上,背景滚动比前景元素慢。
我发现这个新的“技巧”正在起作用。随着滚动的进行,更改top
属性以创建视差效果。
问题...
因此,为了提高性能并减轻元素不在用户视口内时CPU的负担,我创建了if
语句,该语句检查top
位置是否大于300px。如果是,它将覆盖所有内容并将top
属性设置回0,因此它将无缘无故地不断增加。
现在,只需滚动一下。看到红色的div
越过白色的时,白色的结巴怎么办?在DOM检查器中查看,我发现if
语句很奇怪,将top
属性设置为0px,即使它不超过300px。快点
在此期间,我很乐意看到有关视差效果的更多建议。我已经看到了有关此效果的一些答案,但它们似乎……对我来说过于复杂。我知道有更好的方法可以做到这一点,我知道有。
而且,如果没有jQuery答案,将不胜感激。谢谢。
var txtfirst = document.getElementById("txtfirst");
window.onscroll = function(){
var ypos = window.pageYOffset;
txtfirst.style.top = ypos * 0.4 + "px";
if(txtfirst.style.top > '300px'){
txtfirst.style.top = '0px';
}
}
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
.text-first {
display: flex;
text-align: center;
justify-content: center;
align-items: center;
font-size: 32px;
font-family: Arial;
color: gray;
width: 100%;
height: 500px;
position: relative;
}
.foreground-red {
width: 100%;
height: 600px;
background-color: red;
display: flex;
justify-content: center;
align-items: center;
font-family: Arial;
color: gray;
font-size: 32px;
}
.spacer { /*for scrolling purposes*/
width: 100%;
height: 1000px;
}
<div class="text-first" id="txtfirst">THIS IS SOME TEXT</div>
<div class="foreground-red">THIS SHOULD GO ABOVE</div>
<div class="spacer"></div>
最佳答案
您的应用程序很有可能(我假设您仅提供了选定的代码片段)无法正常工作,至少是因为您要比较数字时正在比较文本,以进行优化:
txtfirst.style.top > '300px'
Element::style
属性的每个属性(例如您的情况下为
txtfirst.style
)都是
text string,而不是
number。像
"50px" < "300px"
这样的测试不会比较50是否小于300,而是比较文本值
lexicographically。
parseInt
函数将
50px
之类的值转换为数字50。然后您的测试将如下所示:
parseInt(txtfirst.style.top) < 300
Window::getComputedStyle(element)
函数检索元素的计算样式。
getComputedStyle
读取属性并将它们直接写入首选的样式表(如果需要,可以为空)(
document.styleSheets
,反映所有
link rel=stylesheet
和
style
元素):
function rule(selector) {
var sheet = document.styleSheets[0];
return Array.prototype.find.call(sheet.cssRules, rule => rule.selectorText == selector);
}
var txtfirst = document.getElementById("txtfirst");
window.onscroll = function() {
var ypos = window.pageYOffset;
var style = rule(".text-first").style;
style.top = ypos * 0.4 + "px";
if(parseInt(getComputedStyle(txtfirst).top) > 300) {
style.top = "0px";
}
}
rule
函数从找到的第一个样式表(您只有一个)中返回带有匹配选择器(例如
.text-first
或
html, body
)的CSS规则(其中包含一组CSS属性)。规则的
style
属性是指包含规则中设置的所有CSS属性的对象。它的行为与内联样式对象相同。请注意,您在上面的任何地方都没有使用内联样式,而是写入了样式表对象(由文档的
<style>...</style>
片段初始化)并回读了计算所得的值。
scroll
事件用于动画的问题
scroll
事件?这将使您的视差效果停滞不前,因为在用户停止滚动后会触发单个
scroll
事件。这与浏览器进行页面滚动的方式有关–使用受限制的移动CPU资源来实现平滑的页面滚动动画,仅每秒一次执行
scroll
事件处理程序的JavaScript代码60次,这被认为过于慷慨,而Apple取而代之的是颇有争议的解决方案,因为它们原本就是好的UX。
scroll
事件该怎么办?您可以使用旧的
setInterval
:
function rule(selector) {
var sheet = document.styleSheets[0];
return Array.prototype.find.call(sheet.cssRules, rule => rule.selectorText == selector);
}
var txtfirst = document.getElementById("txtfirst");
var old_window_pageYOffset = window.pageYOffset;
setTimeout(function() {
var ypos = window.pageYOffset;
if(ypos != old_window_pageYOffset) return;
old_window_pageYOffset = ypos;
var style = rule(".text-first").style;
style.top = ypos * 0.4 + "px";
if(parseInt(getComputedStyle(txtfirst).top) > 300) {
style.top = "0px";
}
}, 1000 / 60);
scroll
事件。综上所述,较新的iOS版本已恢复了行为,并且滚动位置的每次更改都会触发
scroll
事件。意味着您可能只是想将其用作基准并取决于事件而不是
setInterval
。后者的一个免费好处是您可以控制视差效果的运行速度。
requestAnimationFrame
,它比
setInterval
更“智能”,因为如果用户代理认为不需要动画,例如,如果整个页面选项卡不可见或与之交互,则用户代理将不会调用您的代码。目前的用户。请放心,动画将在“需要时”运行:
function rule(selector) {
var sheet = document.styleSheets[0];
return Array.prototype.find.call(sheet.cssRules, rule => rule.selectorText == selector);
}
var txtfirst = document.getElementById("txtfirst");
var old_window_pageYOffset = window.pageYOffset;
requestAnimationFrame(function() {
var ypos = window.pageYOffset;
if(ypos != old_window_pageYOffset) return;
old_window_pageYOffset = ypos;
var style = rule(".text-first").style;
style.top = ypos * 0.4 + "px";
if(parseInt(getComputedStyle(txtfirst).top) > 300) {
style.top = "0px";
}
});
on*name*
时,我不使用
addEventListener
系列功能。前者是每个处理程序的一个属性,并且不能保证您的脚本是这些属性的唯一使用者-它们可能已经由浏览器扩展设置。我们可以争辩说网页作者是否拥有专有权并可以访问他们可以使用的所有属性,但是至少我已经解释了我的理由。使用
addEventListener("scroll", function() { ... })
并没有明显的缺点。
document.querySelector(".text-field")
将返回其类名称列表中第一个具有“文本字段”的可用元素。
perspective
属性以及其他一些方法来实现(尽管对于浏览器而言,没有一些小漏洞,但没有任何JavaScript)所需的效果。它还提到了我上面警告过的一些相同的事情,这些都是我试图规避和解释的事情。
关于javascript - 视差-元素毛刺,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50890728/
好的,所以我已经创建了自己的视差 jQuery/JS 脚本,但我只是不知道如何定位支持以下内容(需要以下内容)的浏览器: 支持背景位置的转换 我正在尝试的站点(预览)是: My Test Site 我
我正在制作带有固定背景和封面的整页。 当我添加视差时 - 动画看起来不错,但它滞后太多,我不知道为什么。我有一台很好的 PC,所以这不是这个问题,我之前让其他人产生了视差,这并不滞后。 有什么解决办法
我有一个奇怪的组合 - 视差和汉堡菜单。问题是米 导航会在您悬停的任何地方下降,不仅 当您将鼠标悬停在汉堡菜单图标上时。我认为这是一个厚厚的错误 代码,但我找不到它。我没有 jquery 的。还有,我
因此,我一直在努力围绕这种名为“视差”的整洁效果。基本上,背景滚动比前景元素慢。 我发现这个新的“技巧”正在起作用。随着滚动的进行,更改top属性以创建视差效果。 问题... 因此,为了提高性能并减轻
我的导航栏在 CSS 中加入视差效果后无法保持固定。 我在我的网站上放置了一个带有过渡 JS“Math.round($(window).scrollTop()) > 490)”的固定导航栏。 之后,我
这是一个非常模糊的问题,但我不确定从哪里开始,所以如果有人能给我一些想法,那你就太好了。 我想在我的网站主页上使用视差效果,但我不确定如何创建这种效果。我想要的效果在这里装箱http://davega
我使用了本教程中的视差脚本 http://tympanus.net/codrops/2011/01/03/parallax-slider/ 我在这里发布了一个 fiddle http://jsfidd
我想知道如何创建视差滚动效果之类的东西。向下滚动得越远,div 变得越不透明,在某个点之后,它又开始变得更加透明。我知道需要 JS/JQuery 才能做到这一点。谁能给我一个简单的方法来实现这个目标?
我的页面上有一个元素是绝对定位的。 我正在尝试编写一段 jQuery 代码,使该元素的滚动速度比页面上其他元素的滚动速度慢。 到目前为止,我已经写了这篇文章,但似乎根本无法让它发挥作用。有没有人有这方
我是 cocos2d 世界的新手,我正在开发我的第一个教程并面临一个问题我的问题是我有一个图像(1024 X 320)并且我的方向是横向我需要从右到左连续移动该图像为此目的我使用了 Ray 的太空射击
我需要调试此 jQuery 的帮助,其中我操纵容器中元素的上边距,该容器具有固定大小并将溢出设置为隐藏,以便我可以创建视差效果。视差有效,但如果您向下滚动一个像素,然后重新加载页面,它就会中断。谁能帮
我有一个 div,我想留在原地,这样导航栏和其他部分就可以通过它。 这是我目前的工作:
我建了一个网站,页面很长。我们决定使用纯 CSS3 为它添加视差并且它起作用了。 我从这里得到的 CSS3 视差代码: codepen.io/keithclark/pen/JycFw 后来,我们决定应
由于我对 Javascript/Jquery/HTML5/CSS3 还是个新手,我想我应该问一个问题给你们这些更有经验的程序员。 我有点卡在我的程序逻辑的开头。我想做一个具有视差“滚动”效果的网站,但
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,
-- 更新 2 -- 如果您使用单个相机计算距离,下面的文章非常有用(尽管它使用的是 Python 而不是 C++):Find distance from camera to object/marke
我有一个使用 skrollr 构建的视差网站在我到达页面末尾之前效果很好。我想要一个 成为您可以在页面上滚动的最后/最远点。 目前,如果我在大屏幕上查看时会留下巨大的空白,或者我无法进一步向下滚动以在
我不明白为什么会这样:我有: https://jsfiddle.net/d5jehq02/1 background forefront 我正在
我看到很多例子说明视差背景当你滚动或 ListView 视差但是我找不到一个清楚的例子如何在你滚动 Activity 时对图像实现视差效果。 可以在 Airbnb 应用程序中找到示例实现。向下滚动时,
我的背景图片来自background-url,我的视差适用于我放置的图片:background-attachment: fixed; 我怎样才能让背景图片在我滚动时稍微移动一点? 这是我正在谈论的例子
我是一名优秀的程序员,十分优秀!