jq模仿雨滴下落的动画

效果如图:

 

实现思路:定时器每隔x秒生成宽高、下落速度(即动画执行时间)、left随机的div。

1.CSS:

body{
    overflow: hidden;/*这是为了防止出现滚动条*/
}
.com{
    border-radius: 0 50% 50% 50%;
    background: skyblue;
    transform: rotate(45deg);
    position: absolute;
    top: 0;
}

 

2.JS:

$(function(){
    var obj={
        maxW:100,//最大宽度
        minW:10,//最小宽度
        maxSpeed:10000,//最大速度,单位ms
        creat:400//创建雨滴个数的快慢,单位ms
    }
    rain(obj)
})
function rain(obj){
    var maxW=obj.maxW;
    var minW=obj.minW;
    var maxSpeed=obj.maxSpeed;
    var time=obj.creat;
    
    var maxLeft=$(window).width();

    var time1;
    var j=0;
    time1=setInterval(function(){
        var width=Math.random()*maxW;//随机宽度
        width=width.toFixed(2);
        if(width<minW){
            width=minW;
        }
        
        var left=Math.random()*maxLeft-width;//随机left值
        left=left.toFixed(2);
        if(left<0){
            left=0;
        }
        j++;
        
        var speed=Math.random()*maxSpeed;//随机速度
        
        var item='<div class="com rain'+j+'" style="left:'+left+'px;width:'+width+'px;height:'+width+'px"></div>';//创建雨滴
            
        $("body").append(item);
            
        move($(".rain"+j),speed);//雨滴移动
    },time)
}
function move(op,speed){
    var winH=$(window).height();
    var maxH=winH+op.height();//雨滴下落的高度,页面高度加上自身高度就能看到完全落到最底部
        
    op.animate({
        "top":maxH+"px"
    },speed,function(){
        op.remove();//删除该雨滴
    });
}

 本来最开始想计算雨滴left和下落高度的最大值,以免出现滚动条,但是后来想直接body加个overflow:hidden不是更好么,省去多余的代码,效果还一样。

除了用JS实现,还可以用canvas来实现。

 

posted @ 2018-02-26 12:32  站住,别跑  阅读(878)  评论(0编辑  收藏  举报