一、前言

前言:最近圣诞节来临,需要在页面上应用一个雪花飘落的效果,做之前产品经理给了我网络上的一个demo,地址是
http://demo.lanrenzhijia.com/demo/1225/sd/,预览了一下,效果不错,但是性能可以再优化,源码中使用setInterval重复定时器,
dom在不停地插入移除,这里主要优化这两个地方,使用setTimeout替换setInterval,减少页面dom的重排,其他地方可以自己调整。

二、应用实例demo

/*** component: jQuery.snowflake 2013/12/19 华子yjh* invoking: jQuery.snowflake(options)*// 配置对象options = {length: 26,     // 数量interval: 1000, // 雪花之间出现的时间间隔duration: 24000 // 雪花的动画时间}**/

demo地址1:http://miiee.taobao.com/activity/shengdan.htm
demo地址2:http://miiee.taobao.com/

三、设计思路

第一步:

用HTML实体代表雪花外形,雪花出现的位置,大小都是随机的

第二步:

保持相邻雪花之间出现的时间间隔(或者它们之间的距离)永远一致; 就必须使用重复定时器,使用双setTimeout,而非setInterval,这一步很重要

setTimeout(function call() {// do something
    setTimeout(call, interval);
},0);// 使用双setTimeout模拟重复定时器对于对于自动轮播等其他应用非常有用,
// 推荐阅读javascript高级程序设计一书有关setInterval的缺点及解决办法

四、组件源码

最初代码:

$.extend({// 雪花飘落组件snowflake: function(options) {var flakeHtmlStr = '',config = {length: 26,     // 数量interval: 1000, // 雪花之间出现的时间间隔duration: 24000 // 雪花的动画时间
            };$.extend(config, options || {});var len = config.length,$win = $(window),win_width = $win.width(),win_height = $win.height(),timeoutId = null,$items,i,initStyle = {position: 'absolute',top: '-50px',zIndex: 9999,opacity: 1,fontSize: 0,color: '#FFF'},endStyle = {top: win_height + 50 + 'px',opacity: 0};// 插入DOM,并初始化其样式for (i = 0; i < len; i++) {flakeHtmlStr += '<div class="snow-flake">❄</div>';}$(flakeHtmlStr).appendTo('body');$items = $('.snow-flake').css(initStyle).wrapAll('<div id="snowflake-box"></div>');// 处理单个雪花function handleItem(idx) {var $itm = $items.eq(idx).css(initStyle),w, val;$itm.css({fontSize: 20 + Math.ceil(Math.random() * 30, 10) + 'px'});w = $itm.width();val = Math.floor(Math.random() * win_width);if ((val + w) >= win_width) {val = val - w;}$itm.css({left: val + 'px'}).animate(endStyle, config.duration);}// 开始运行function running() {var i = 0;setTimeout(function call() {handleItem(i);if (i < len-1) {i++;}else {i = 0;}setTimeout(call, config.interval);}, 0);}running();}
});$.snowflake(); // 调用

View Code

更新优化后的代码:

$.extend({// 雪花飘落组件snowflake: function(options) {var $items, len,win_height = $(window).height(),maxVal = $(window).width() - 24, // 防止浏览器出现横向滚动条,24px为font-size: 35px;时的宽度
options = $.extend({length: 21,     // 数量interval: 1200, // 雪花之间出现的时间间隔duration: 24000 // 雪花的动画时间}, options || {});len = options.length;// 初始化dom(function(){var flakeHtmlStr = '', i;// 插入DOM,并初始化其样式for (i = 0; i < len; i++) {flakeHtmlStr += '<div class="snow-flake">❄</div>';}$(flakeHtmlStr).appendTo('body');$items = $('.snow-flake').css({position: 'absolute',top: '-40px',color: '#FFF',zIndex: 999}).wrapAll('<div id="snowflake-box"></div>');}());// 处理单个雪花function handleItem(idx) {$items.eq(idx).css({top: '-40px',opacity: 1,left: Math.random() * maxVal + 'px',fontSize: [25, 30, 35][(Math.random() * 3).toString().charAt(0)] + 'px'}).animate({top: win_height + 'px',opacity: 0}, options.duration);}// 开始运行function running() {var i = 0;setTimeout(function call() {handleItem(i);if (i < len-1) {i++;}else {i = 0;}setTimeout(call, options.interval);}, 0);}running();}
});$.snowflake(); // 调用

转载请注明出处:博客园华子yjh

转载于:https://www.cnblogs.com/yangjunhua/p/3481899.html

jQuery.snowflake雪花飘落插件相关推荐

  1. 雪花飞舞的java程序_jqmcsnow jquery圣诞节雪花飘落网页特效,配上了 树和雪景,在加上本效果实现的 飞 JavaScript 238万源代码下载- www.pudn.com...

    文件名称: jqmcsnow下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 146 KB 上传时间: 2014-09-28 下载次数: 0 详细说明:jquery ...

  2. php实现页面雪花效果,JavaScript_使用javascript实现雪花飘落的效果,看了javascript网页特效实例大全 - phpStudy...

    使用javascript实现雪花飘落的效果 看了javascript网页特效实例大全中的图片飘下的效果实例,觉得值得动手学习下. 就把图片改成雪花图,完成一个雪花飘下的效果. 并且,其中有些内容比较陈 ...

  3. java飘落的雪花_[Java教程]树叶飘落、雪花飘落等同时多个图片飘落

    [Java教程]树叶飘落.雪花飘落等同时多个图片飘落 0 2018-07-10 04:00:54 snowfall.jquery.js是树叶等图片飘落的插件,但是只支持一种图片的飘落效果,但是我遇到的 ...

  4. HTML5 canvas绘制雪花飘落

    Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表.动画等.没有Canvas的年代,绘图只能借助Flash插件实现,页面不得不用JavaScript和Fl ...

  5. three.js 几何体-组合网格_ThreeJS 粒子系统实现雪花飘落动画

    ThreeJS 粒子系统中,THREE.Points是用来创建点的类,也用来批量管理粒子,基于几何体的顶点来渲染每个粒子.这个类的构造函数有两个参数,geometry(几何体)和material(材质 ...

  6. java实现物体下落效果_手撸一个物体下落的控件,实现雪花飘落效果

    效果图: 圣诞登录页.gif 参考文章: Android自定义View--从零开始实现雪花飘落效果 感谢原文作者,不仅实现了效果,并且写得非常详细,还做了优化.笔者参考原文作者的源码,做了一点修改,实 ...

  7. JAVA实现雪花飘落动画效果

     效果如下:  步骤: 一.在项目中创建一个继承JFrame类的MainFrame窗体类.一个继承Jlable类,并实现Runnable接口的自定义标签类SnowFlakeLable及一个背景面板类B ...

  8. vue实现雪花飘落特效

    <p>可以使用 HTML5 canvas 元素来实现雪花飘落的动画效果.你可以在 canvas 中绘制雪花的图形,然后使用 JavaScript 实现动画效果.</p> < ...

  9. HTML圣诞节代码,圣诞节贺卡源代码,实现圣诞节雪花飘落效果

    HTML圣诞节代码,圣诞节贺卡源代码,实现圣诞节雪花飘落效果 完整代码下载地址:HTML圣诞节代码,圣诞节贺卡源代码,实现圣诞节雪花飘落效果 index.html <!DOCTYPE html& ...

最新文章

  1. WinXp安装Oracle 11g Express Edition
  2. spring-boot-2.0.3之quartz集成,不是你想的那样哦!
  3. linux下重启mysql php nginx
  4. 笨方法python3_“笨方法”学Python3,习题 43 。
  5. linux更新软件载入缓存后停止_linux 中缓存怎样清除
  6. dom元素滚动条高度 js_javascript 设置元素滚动大小
  7. form表单file,select选择后自动提交
  8. 系统动力学模型_RCR新文:基于系统动力学模型的中国煤炭产能情景预测
  9. [C#] 汉字转拼音,支持多音字
  10. 利用matlab命令画出以下信号的波形,大连理工大学 信号与系统实验三报告
  11. HandBrake 开源视频转码器、编码转换器、格式转换器
  12. Mac锁屏 设置快捷键
  13. 计算机入门新人必学,电脑新手入门教程 让你快速上手
  14. 百度paddlepaddle入门讲解第一周内容
  15. crt格式证书转pem格式证书
  16. 神马笔记 版本1.7.0——辅助编辑·缘起篇
  17. Eclipse使用指南
  18. 介绍国产的PHP MVC框架:FleaPHP
  19. uboot代码详细分析.pdf
  20. 乐思蜀:我们不做网络民工

热门文章

  1. 思科(Cisco)交换机软件版本升级步骤
  2. 介绍c语言的英语论文,c语言中英文翻译资料毕业论文.doc
  3. # 2017-2018-1 20155312《信息安全技术》实验二——Windows口令破解实验报告
  4. 电信运营商用户流失分析
  5. matlab圆周卷积计算方法,线性卷积与圆周卷积的计算.doc
  6. 【毕业答辩】值得所有毕业生收藏的论文答辩技巧!
  7. Arduino 光敏传感器 LCD1602A
  8. PB多线程的实现与线程池设计
  9. 全国计算机一级历年选择题,全国计算机一级考试试题MS_Office(历年真题_选择题)...
  10. 数据挖掘过来人的建议