canvas下拉刷新--模仿水滴

本文介绍了一种使用canvas模仿苹果Podcast下拉刷新水滴动画的方法。通过canvas绘制,实现了圆圈拉伸和弹性回弹效果,其中涉及到贝塞尔曲线的运用。代码中使用了缓动函数和百分比方式控制拉动距离,便于适应不同尺寸的屏幕。项目源码已上传至GitHub,欢迎反馈问题和建议。
摘要由CSDN通过智能技术生成

下拉刷新--模仿水滴

最终效果
测试地址
这种拟物的设计曾经多次用在IOS的设计中,上图的下拉刷新就是模仿自苹果的Podcast(播客)。随着系统扁平化设计的步步深入,这种可以让人心领神会的小动画渐渐的被更加标准的旋转的菊花所代替。拟物扁平孰优孰劣,已经不在重要,这里只是想用web技术再仿制一次这个神奇的小水滴。可能已经再也用不上,仅仅作为向优秀设计的致敬。

效果中的圆圈可以根据手势被拉长,而且在弹回的时候速度由快变慢,有一种橡皮的感觉。速度由快变慢可以使用tween.js中的缓动函数解决,但是变形的圆圈css3有点鞭长莫及,而且考虑到效率的问题还是使用canvas直接绘制。

仔细考虑后将变形的圆圈分成3个部分,上下两个圆圈,加上中间一个向内凹陷的矩形。

上下圆使用arc()绘制,中间蓝色的矩形只能使用beginPath()来绘制。在绘制的过程中直线部分使用lineTo()可以直接绘制,那曲线部分呢?自然是是用贝塞尔曲线,这里使用二次贝塞尔曲线quadraticCurveTo()就可以了,三次方贝塞尔曲线也可以但是要增加个控制点,增加了复杂度。可以在photoshop中使用钢笔工具画出这个不规则矩形,来形象的观察贝塞尔曲线的控制点要放置什么位置,因为钢笔工具也是使用贝塞尔曲线实现的。我在代码编写的过程中就是通过ps中钢笔工具来反复尝试控制点的位置。

首先来确定比较简单的部分,即上下两个圆c1(上圆),c2(下圆)的参数。

c1的圆心坐标先用(100,100),拉开的距离即两圆圆心的距离d=80,根据上面的参数可以确定c2的圆心坐标,其中c2.x=c1.x,c2.y = c1.y+d。在拉开的过程中,两圆的半径会根据拉开的距离d相应减小,c2减小的幅度比c1大,所以两圆的半径应该根据距离d确定。c1.r=50-this.d/3,c2.r=50-this.d/2。其中50为未拉开时的最大距离,随着距离增大,r相应减小,c2减小的更剧烈

function Drop(canvas){
    this.canvas = canvas;
    this.ctx = canvas.getContext("2d");
    this.d = 80;
    this.c1 = {
        x:100,
        y:100,
        r:50-this.d/3
    };
    this.c2 = {
        x
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值