javascript - 动画结束后添加一个小反弹
问题描述
https://www.ateliergymnase.com/
以这个站点为例,如果您向下滚动到团队成员部分并打开您的开发控制台,您会注意到即使您停止滚动,仍然会有一小部分动画在继续。
相比之下:https : //codepen.io/DaveMoran/full/QBbVmM/ 使用animejs,当用户停止滚动时,动画会停止,而不是更流畅的停止动画。
动画的JS代码:
jQuery(document).ready(function($) {
// Window properties
let wHeight = window.innerHeight;
let wWidth = window.innerWidth;
$(window).resize(function () {
wHeight = window.innerHeight;
wWidth = window.innerWidth;
});
let container = $('#scroll-container');
let containerYOffset = Math.floor(container.offset().top - wHeight);
$(window).on('scroll', function() {
let currentPosition = $(window).scrollTop();
if(currentPosition >= containerYOffset) {
container.css('position', 'absolute');
container.css('bottom', '0');
container.css('top', 'unset');
}
container.css('position', 'fixed');
let xTranslateAmt = currentPosition - containerYOffset;
let scroll = anime({
targets: '#scroll-container',
translateX: -((xTranslateAmt - wHeight / 5) * 1.1) + 'px',
easing: 'linear',
elasticity: 400,
duration: 0,
})
})
})
有没有办法在滚动结束后添加一个小反弹或触发一个迷你动画?
解决方案
我不确定这是否是您想要的,因为您的问题对我来说不是很清楚。
但也许你可以通过添加一个transition
. 运行以下代码段:
jQuery(document).ready(function($) {
// Window properties
let wHeight = window.innerHeight;
let wWidth = window.innerWidth;
$(window).resize(function() {
wHeight = window.innerHeight;
wWidth = window.innerWidth;
});
let container = $('#scroll-container');
let containerYOffset = Math.floor(container.offset().top - wHeight);
$(window).on('scroll', function() {
let currentPosition = $(window).scrollTop();
if (currentPosition >= containerYOffset) {
container.css('position', 'absolute');
container.css('bottom', '0');
container.css('top', 'unset');
}
container.css('position', 'fixed');
let xTranslateAmt = currentPosition - containerYOffset;
let scroll = anime({
targets: '#scroll-container',
translateX: -((xTranslateAmt - wHeight / 5) * 1.1) + 'px',
easing: 'linear',
elasticity: 400,
duration: 0,
})
})
})
body {
overflow-x: hidden;
}
.above-scroll,
.below-scroll {
width: 100vw;
background: #efefef;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
position: relative;
z-index: 2;
}
#scroll-content {
padding: 50px 30px;
height: calc(2300px + 100vh);
widtH: 100%;
position: relative;
overflow: hidden;
}
#scroll-container {
display: flex;
flex-direction: row;
height: 100vh;
left: 100vw;
width: 2300px;
justify-content: space-between;
align-items: center;
position: relative;
top: 0;
transition: .5s cubic-bezier(.59, .86, .96, 1.14)
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/2.2.0/anime.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="above-scroll">
<h2>Above Scroll</h2>
</div>
<div id="scroll-content">
<div id="scroll-container">
<img src="https://placehold.it/320x320" />
<img src="https://placehold.it/320x420" />
<img src="https://placehold.it/320x480" />
<img src="https://placehold.it/320x320" />
<img src="https://placehold.it/320x480" />
<img src="https://placehold.it/320x200" />
</div>
</div>
<div class="below-scroll">
<h2>Below Scroll</h2>
</div>
推荐阅读
- python - Python NLP 中的 lambda 演算三元组
- python - 如何从 tkinter 获取数据并将其添加到海龟中?
- node.js - 在 Mocha 开始所有测试之前发出请求
- sapui5 - 没有在 ESC 上关闭 sap.m.popover
- coldfusion - 使用 cfhttp 检索客户数据 - I/O 异常:对等体未通过身份验证
- java - 无法解决:com.google.firebase:firebase-core:16.0.1
- javascript - Heroku 与其余参数不兼容 ...args
- c# - C# - 如何将二进制字节数组写入 XML 中的 CData 属性
- c# - 如何从表单外的视图将数据传输到控制器或不创建新输入
- nginx - nginx动态重定向url