英文:
ScrollY to Window Position
问题
我正在寻求关于JS中scrollY的建议。
情况看起来是这样的:
我有一个元素,它通过window.scrollY进行缩放,并且我正在使用滚动平滑脚本。
不幸的是,这个脚本“减慢”了视口但没有减慢滚动值。
我希望这个可缩放的元素在视口位置上工作,而不是在滚动值上,因为现在它不是平滑缩放,只有在滚动滚轮时才“跳跃”到大小。
这是用于缩放对象的脚本:
const div = document.querySelector('#text-panel');
window.addEventListener('scroll', () => {
console.log(window.scrollX)
div.style.transform = `scale(${0 + window.scrollY/500})`;
});
这是我用于平滑滚动的脚本:
https://sudip-bhowmick.github.io/butterjs/butter.js
我应该使用什么来实现平滑缩放。
我曾尝试在CSS中使用一些过渡效果,但在这种类型的元素上不起作用。
此外,我发现了一些像“viewportOffset.top”之类的东西,但不知何故它不起作用。
英文:
I am looking for advice in JS about scrollY.
Situation is looking like that:
I have element that is scalling by window.scrollY, and I am using scroll smoothing script.
Unfortunetly this script "slows" viewport but not scroll value.
I want this scalable element to work on viewport position not on scroll value because right now it is not scalling smooth, it only "jumps" to size when moving scroll wheel.
This is script for scalling object:
const div = document.querySelector('#text-panel');
window.addEventListener('scroll', () => {
console.log(window.scrollX)
div.style.transform = `scale(${0 + window.scrollY/500})`;
});
This is script I am using to smooth scrolling:
https://sudip-bhowmick.github.io/butterjs/butter.js
What should I use to change this to smooth scaling.
I was trying to use some transition in Css but it is not working on this type of element.
Additionaly i found something like "viewportOffset.top" but somehow it is not working.
答案1
得分: 0
CSS过渡:
CSS过渡可以用于实现平滑动画,无需复杂的JavaScript计算。
#text-panel {
transition: transform 0.3s ease; /* 添加对transform属性的过渡效果 */
}
JavaScript缩放:
您可以使用JavaScript根据当前视口位置来更新元素的缩放比例。不使用window.scrollY
,而是使用window.pageYOffset
,它返回当前滚动位置的垂直像素值。
const div = document.querySelector('#text-panel');
window.addEventListener('scroll', () => {
const viewportPosition = window.innerHeight - div.getBoundingClientRect().top;
const scaleFactor = 1 + (viewportPosition / 500); // 根据需要调整缩放强度的除数值
div.style.transform = `scale(${scaleFactor})`;
});
viewportPosition
计算了元素在视口中可见的部分。元素距离视口顶部越近,viewportPosition
就越大。然后,scaleFactor
根据这个位置调整缩放比例。
英文:
If you want to achieve smooth scaling of an element based on the viewport position rather than the scroll value, you can use a combination of CSS transitions and JavaScript to create a smooth effect. Using a library like butter.js for smooth scrolling might conflict with the effect you're trying to achieve. Here's how you can do it:
CSS Transitions:
CSS transitions can be used to achieve smooth animations without the need for complex JavaScript calculations.
css
#text-panel {
transition: transform 0.3s ease; /* Add transition to the transform property */
}
JavaScript for Scaling:
You can use JavaScript to update the scale of the element based on the current viewport position. Instead of using the window.scrollY, you can use window.pageYOffset which returns the vertical pixel value of the current scroll position.
javascript
const div = document.querySelector('#text-panel');
window.addEventListener('scroll', () => {
const viewportPosition = window.innerHeight - div.getBoundingClientRect().top;
const scaleFactor = 1 + (viewportPosition / 500); // Adjust the division value for scaling intensity
div.style.transform = `scale(${scaleFactor})`;
});
viewportPosition calculates how much of the element is visible in the viewport. The closer the element is to the top of the viewport, the larger the viewportPosition will be. The scaleFactor then adjusts the scaling based on this position.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论