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

问题描述

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

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

这是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);

解决方案

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

时间: 2024-08-03 15:19:36

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

Fireworks制作电视雪花效果

教程重点简述:通过渐变选项的调整实现动画效果. 教程开始之前,首先请看如下所示动画效果: 如何才能产生这种类似电视雪花效果的动画呢?通过滤镜.插件?不用,FW4里面已经为我们准备好了这种效果,请看后面的详细步骤: [注意]在开始本节的学习前,请大家首先参阅一下先前的文章"模拟条形码的制作",因为我们后面的操作是对上一节操作的继续,相关的内容这里就不再赘述了. 第一步.首先我们先和"模拟条形码的制作"一文简单的接一下头,在"模拟-"一文中,通过调整

电视雪花效果动画

教程开始之前,首先请看如下所示动画效果: 如何才能产生这种类似电视雪花效果的动画呢?通过滤镜.插件?不用,FW4里面已经为我们准备好了这种效果,请看后面的详细步骤: [注意]在开始本节的学习前,请大家首先参阅一下先前的文章"模拟条形码的制作",因为我们后面的操作是对上一节操作的继续,相关的内容这里就不再赘述了. 第一步.首先我们先和"模拟条形码的制作"一文简单的接一下头,在"模拟-"一文中,通过调整矩形的颜色调节手柄,已经出现了如图01所示的条形

PS暗黑小红帽雪花效果后期调色修图思路及方法

  冬天来了!关于冬天的摄影主题很多!这一次由摄影师@苏十一_ 为大家带来,暗黑小红帽雪花效果后期调色修图思路及方法,喜欢的可以借鉴 分类: PS图片处理 ps后期处理教程

粒子雪花效果

粒子雪花效果   效果   源码 https://github.com/YouXianMing/Animations // // EmitterSnowController.m // Animations // // Created by YouXianMing on 15/12/21. // Copyright 2015年 YouXianMing. All rights reserved. // #import "EmitterSnowController.h" @interface

图片-在线等急...请问腾讯思品我的影院效果如何做的

问题描述 在线等急...请问腾讯思品我的影院效果如何做的 曾考虑过用viewpage或者RecyclerView做.但是没有思路或者是做过的麻烦大大们告我.. 我的影院 解决方案 这个就是美工切图做出来的,没有什么特别的. 解决方案二: 用3d相册 MainActivity: package com.android.CustomGallery; /** 一个实现了3D效果的Gallery,就像iPhone中的相册浏览一样炫-- */ import android.app.Activity; im

界面-酷安首页那个下滑之后 把内容扩展的效果怎么做的

问题描述 酷安首页那个下滑之后 把内容扩展的效果怎么做的 下滑之后 按钮就缩为四个小按钮 解决方案 百度一下,应该会知道 解决方案二: 不清楚你要怎样的效果,不过大致可以给你些思路.你需要的效果,需要通过animation去实现(最好是object animation),在onScroll里去不断的改变透明度和大小等. 解决方案三: 提问题说明白了.然后最好有图片

android音乐播放器,音乐暂停时音量逐渐减小的效果怎么做?

问题描述 android音乐播放器,音乐暂停时音量逐渐减小的效果怎么做? QQ音乐,酷狗等音乐播放器,暂停时音量逐渐减小的效果怎么做? 我的做法是: 开个线程改变音频流的音量 audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 1 ,0); 但是这样会有很多问题,所以不想用这种方法.

6 cocos2dx粒子效果,类图关系,系统原生粒子和自定义粒子效果,粒子编译器软件,爆炸粒子效果,烟花效果,火焰效果,流星效果,漩涡粒子效果,雪花效果,烟雾效果,太阳效果,下雨效果

 1 粒子 示例 2 类图关系 3 系统原生粒子 CCParticleSystem 所有粒子系统的父类 CCParticleSystemPoint. CCParticleSystemQuad 点粒子和方形粒子系统,都继承了CCParticleSystem的所有属性 CCParticleExplosion 爆炸粒子效果 CCParticleFireworks 烟花粒子效果 CCParticleFire 火焰粒子效果 CCParticleMetepr 流行粒子效果 CCParticleSpira

大家来看这种效果怎么做?

问题描述 大家来看一下这种效果怎么做的?http://club.china.alibaba.com/forum/thread/view/119_25465655_.html#picture右边"超人气牛图"上一组,下一组图片滚动的这种效果怎么做的?我是新手,请大家帮忙,最后能给个简单点的例子!先谢了! 解决方案 解决方案二:js做的,你把它的js扣出来解决方案三:嗯可是没有看明白!还是没弄成,现在急用!高手帮帮忙!解决方案四:只是简单的div控制下而且然后加点美工解决方案五:给你个思路