【发布时间】:2019-01-10 03:10:37
【问题描述】:
我创建了一个基于滚动位置进出动画的两个盒子的小演示。但这并不是我想要实现的。我想要的是让框根据滚动位置进行动画处理,而不仅仅是在达到某个点时过渡进出。
例如,滚动应该控制动画,因此如果向下滚动,框将动画化,如果向上滚动,它们将动画化。如果您停止滚动中间动画,动画将停止。如果您反转滚动位置,动画将反转。所以动画只会在你滚动时发生。
我希望这足够清楚,您可以理解。我将尝试提供一个链接,指向我想要实现的目标。但现在这里是我的演示,只是使用过渡来为框设置动画。
jQuery(document).ready(function($){
var scroll_pos = $(window).scrollTop();
var box = $('#container').offset().top - 200;
$(window).on('scroll', function(){
scroll_pos = $(window).scrollTop();
$('p').html(scroll_pos);
if(scroll_pos >= box){
$('#left').addClass('animate');
$('#right').addClass('animate');
}else{
$('#left').removeClass('animate');
$('#right').removeClass('animate');
}
});
});
#container{
width: 600px;
height: 300px;
margin: 1000px auto;
overflow: hidden;
font-size: 0;
}
#left{
width: 55%;
height: 300px;
background-color: blue;
display: inline-block;
transform: translateX(-100%);
transition: all 0.5s;
}
#right{
width: 45%;
height: 300px;
background-color: yellow;
display: inline-block;
transform: translateX(100%);
transition: all 0.5s;
}
#left.animate{
transform: translateX(0%);
}
#right.animate{
transform: translateX(0%);
}
p{
position: fixed;
top: 0;
left: 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<p></p>
<div id="container">
<div id="left"></div>
<div id="right"></div>
</div>
这是我想要实现的一个示例。如您所见,滚动控制指尖陀螺的动画https://ampbyexample.com/visual_effects/basics_of_scrollbound_effects/
【问题讨论】:
-
能够在动画发生时控制/取消动画是Web Animations API 背后的主要原因。尽管它始于近十年前,但仍处于草稿阶段,远未获得良好的浏览器支持。您唯一的其他选择是使用velocity.js 并转换到 => maths here,基于 scrollPosition。确切地说,不是使用类 (
.animate) 来应用变换,而是使用velocity.js 将动画转换应用到基于滚动位置的新自定义值translateX -
尽管
velocity.js几乎是你目前在工作中所能期望的最好的,但它在手机上仍然会很生涩,因为它们不会经常触发scroll,因为为了“用户体验”。有些设备根本不scroll,你需要深入了解触摸事件(这是一罐蠕虫:D)
标签: javascript jquery html animation