- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个对多个元素(文本、图像等)具有视差效果的网站。当元素位于视口(viewport)底部时,我需要启动视差效果。
在这种情况下,元素距页面顶部 3000px,当元素位于视口(viewport)中时,我想将 window.pageYOffset 重置为零(或类似的值),这样效果才有意义。
这段代码可以工作,但效果不好,当我更改分隔符高度时,视差效果的开始位置不同。您可以尝试将css中的分隔符高度更改为500px和5000px。
有什么更好的解决方案吗?
谢谢
这是 fiddle :https://jsfiddle.net/you8c6d7/
function parallax(element, delay) {
var start = document.querySelector(element).getBoundingClientRect().top;
var px = window.pageYOffset - (start * 2 + window.innerHeight);
var elClass = document.querySelector(element);
elClass.style.transform = 'translateY(' + '-' + px / delay + 'px' + ')';
};
window.addEventListener('scroll', function() {
parallax('.box', 5);
});
body {
height: 6000px;
margin 0;
}
.box {
background: blue;
width: 300px;
height: 300px;
}
.separator {
height: 500px;
background: grey;
}
<div class="separator"></div>
<div class="box"></div>
最佳答案
这是使用Intersection Observer API的片段.
我用了the experimental feature "IntersectionObserver.thresholds" ,因此是 not supported by IE .
取决于您的target audience ,您可能需要使用 polyfill .
该脚本观察目标框是否与视口(viewport)相交,并根据框/视口(viewport)的比例进行变换。有关更多详细信息,请参阅代码内的注释和 JSDoc。
/**
* Creates an IntersectionObserver and starts observing all elements found using the selector.
*
* @param {String} selector: Selector used to find all target elements
* @param {Number[]} threshold: Array of intersection ratios, at which the callback is executed
* @param {Function} callback: Callback executed for each threshold
*/
function observe(selector, threshold, callback) {
const elements = document.querySelectorAll(selector);
const options = {
rootMargin: '0px',
threshold: threshold,
};
const observer = new IntersectionObserver(callback, options);
for (const element of elements) {
observer.observe(element);
}
}
/**
* Creates a CSS translateY value.
*
* @param {Number} ratio: A number between 0 and 1
* @param {String} total: A valid CSS number and unit (10px, 100%, 30vh, …)
* @return {String} The CSS translateY value.
*/
function translateY(ratio, total) {
return `translateY(calc(-${ratio} * ${total})`;
}
/**
* Callback executed for the box elements
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API
*
* @param {IntersectionObserverEntry[]} entries: Intersection Observer Entries
* @param {IntersectionObserver} observer: Intersection Observer
*/
function boxParallax(entries, observer) {
for (const entry of entries) {
if (entry.isIntersecting) {
entry.target.style.transform = translateY(entry.intersectionRatio, '20%');
}
}
}
/**
* Create one threshold for each intersection ratio.
*
* @return {Number[]}
*/
function createThreshold() {
const threshold = [];
for (let i = 0; i <= 1.0; i += 0.01) {
threshold.push(i);
}
return threshold;
}
const threshold = createThreshold();
observe('.box', threshold, boxParallax);
body {
height: 6000px;
margin 0;
}
.box {
background: blue;
width: 300px;
height: 300px;
}
.separator {
height: 500px;
background: grey;
}
<div class="separator"></div>
<div class="box"></div>
关于javascript - 当元素位于视口(viewport)中时开始视差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57954186/
好的,所以我已经创建了自己的视差 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; 我怎样才能让背景图片在我滚动时稍微移动一点? 这是我正在谈论的例子
我是一名优秀的程序员,十分优秀!