shoestrong 2016-05-12 05:56 采纳率: 0%
浏览 731

实现雪花效果,现在做的是天上下“心”,怎么控制“心”不重叠?急!急!急!

直接上代码,输入‘我想你’我会显示弹出下“心”的效果,并且优化一下代码。
求大神帮忙看下,怎么才能把“心”不重复?

这是html结构

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            background: #000;
            overflow: hidden;
        }
    </style>
</head>
<body>
<input type="text" id="txt">
<script src="http://cdn.bootcss.com/jquery/1.12.3/jquery.js"></script>
<script src="snow.js"></script>
<script>
    $(document).ready(function() {
        $("#txt").on("input",function(){
            if($(this).val()=="我想你"){
                $.fn.snow({
                    newOn: 50
                });
            }
        })
    });
</script>
</body>
</html>

下面是snow.js

  (function($) {
     $.fn.snow = function(options) {
        var documentHeight = $(document).height(),
            documentWidth = $(document).width();
             defaults = {
                 urlImg: "love.png",//img路径
                 minSize: 20,//控制最小元素
                 maxSize: 30,//控制最大元素
                 newOn: 100,//控制显示的多少
                 speed: 2000,//控制速度
                 overTime: 5000,//显示多长时间结束
                 opacity:1,// 透明度
                 xVlaue:0,  // x轴是否发生位移 0:代表不发生位移  1:代表发生位移
                 rotate:60, // 角度
                 overlay:true,//是否重叠,默认重叠为true,否则为false
                 callBack:function(){}
             },
             options = $.extend({}, defaults, options);

         var snowBox=$('<div class="snowBox" />').css({'width':'100%','height':'100%','background':'transparent','position':'absolute','left':0,'top':0,'z-index':99998}).appendTo('body'),
             $snow = $('<div class="snow" />').css({ 'position': 'absolute', 'top': '-50px','pointer-events':'none','user-select':'none','z-index':99999}).html('<img src="'+options.urlImg+'" style="width:100%;height:auto">');

         var interval = setInterval(function() {
                var startPositionLeft = Math.random() * documentWidth - 100,
                    startOpacity = 0.5 + Math.random(),
                    sizeFlake = options.minSize + Math.random() * options.maxSize,// 图片的宽度
                    endPositionTop = documentHeight,
                    endPositionLeft = startPositionLeft - 100 + Math.random() * 200,
                    rotateDeg=Math.random() * options.rotate + Math.random() * (-options.rotate);

                    if(startPositionLeft<10){
                        startPositionLeft= 30 + Math.random()*10;
                    }
                    if(endPositionLeft<10){
                        endPositionLeft= 30 + Math.random()*100;
                    }
                    if(options.xVlaue==0){
                         endPositionLeft = startPositionLeft;
                    }else{
                         endPositionLeft = startPositionLeft - 50 + Math.random() * 200;
                    };

             $snow.clone().appendTo(snowBox).css({
                     left: startPositionLeft,
                     opacity: 0.3,
                     width: sizeFlake+"px",
                     '-webkit-transform':'rotate('+rotateDeg+'deg)',
                     '-moz-transform':'rotate('+rotateDeg+'deg)',
                     '-ms-transform':'rotate('+rotateDeg+'deg)',
                     '-o-transform':'rotate('+rotateDeg+'deg)',
                     'transform':'rotate('+rotateDeg+'deg)',
                 }).animate({
                         top: endPositionTop,
                         left: endPositionLeft,
                         opacity: 1
                     },
                     options.speed,
                     'linear',
                     function() {
                         $(this).remove()
                     }
                 );
         }, options.newOn);

         setInterval(function(){
            clearInterval(interval);
            snowBox.remove();
            options.callBack && options.callBack();
         },options.overTime);
     };
 })(jQuery);
  • 写回答

1条回答

  • 五司命 2016-05-12 06:05
    关注

    你可以吧 x 轴分成很多段,每段内随机位置出,y 轴方向也可以类似,这样肯定不会重叠
    动画不是随机的就不需要维护相对位置来避免重叠了

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记