jQuery.snowflake雪花飘落插件
一、前言
前言:最近圣诞节来临,需要在页面上应用一个雪花飘落的效果,做之前产品经理给了我网络上的一个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的缺点及解决办法
四、组件源码
最初代码:
![](/assets/blank.gif)
![](/assets/blank.gif)
$.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雪花飘落插件相关推荐
- 雪花飞舞的java程序_jqmcsnow jquery圣诞节雪花飘落网页特效,配上了 树和雪景,在加上本效果实现的 飞 JavaScript 238万源代码下载- www.pudn.com...
文件名称: jqmcsnow下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 146 KB 上传时间: 2014-09-28 下载次数: 0 详细说明:jquery ...
- php实现页面雪花效果,JavaScript_使用javascript实现雪花飘落的效果,看了javascript网页特效实例大全 - phpStudy...
使用javascript实现雪花飘落的效果 看了javascript网页特效实例大全中的图片飘下的效果实例,觉得值得动手学习下. 就把图片改成雪花图,完成一个雪花飘下的效果. 并且,其中有些内容比较陈 ...
- java飘落的雪花_[Java教程]树叶飘落、雪花飘落等同时多个图片飘落
[Java教程]树叶飘落.雪花飘落等同时多个图片飘落 0 2018-07-10 04:00:54 snowfall.jquery.js是树叶等图片飘落的插件,但是只支持一种图片的飘落效果,但是我遇到的 ...
- HTML5 canvas绘制雪花飘落
Canvas是HTML5新增的组件,它就像一块幕布,可以用JavaScript在上面绘制各种图表.动画等.没有Canvas的年代,绘图只能借助Flash插件实现,页面不得不用JavaScript和Fl ...
- three.js 几何体-组合网格_ThreeJS 粒子系统实现雪花飘落动画
ThreeJS 粒子系统中,THREE.Points是用来创建点的类,也用来批量管理粒子,基于几何体的顶点来渲染每个粒子.这个类的构造函数有两个参数,geometry(几何体)和material(材质 ...
- java实现物体下落效果_手撸一个物体下落的控件,实现雪花飘落效果
效果图: 圣诞登录页.gif 参考文章: Android自定义View--从零开始实现雪花飘落效果 感谢原文作者,不仅实现了效果,并且写得非常详细,还做了优化.笔者参考原文作者的源码,做了一点修改,实 ...
- JAVA实现雪花飘落动画效果
效果如下: 步骤: 一.在项目中创建一个继承JFrame类的MainFrame窗体类.一个继承Jlable类,并实现Runnable接口的自定义标签类SnowFlakeLable及一个背景面板类B ...
- vue实现雪花飘落特效
<p>可以使用 HTML5 canvas 元素来实现雪花飘落的动画效果.你可以在 canvas 中绘制雪花的图形,然后使用 JavaScript 实现动画效果.</p> < ...
- HTML圣诞节代码,圣诞节贺卡源代码,实现圣诞节雪花飘落效果
HTML圣诞节代码,圣诞节贺卡源代码,实现圣诞节雪花飘落效果 完整代码下载地址:HTML圣诞节代码,圣诞节贺卡源代码,实现圣诞节雪花飘落效果 index.html <!DOCTYPE html& ...
最新文章
- WinXp安装Oracle 11g Express Edition
- spring-boot-2.0.3之quartz集成,不是你想的那样哦!
- linux下重启mysql php nginx
- 笨方法python3_“笨方法”学Python3,习题 43 。
- linux更新软件载入缓存后停止_linux 中缓存怎样清除
- dom元素滚动条高度 js_javascript 设置元素滚动大小
- form表单file,select选择后自动提交
- 系统动力学模型_RCR新文:基于系统动力学模型的中国煤炭产能情景预测
- [C#] 汉字转拼音,支持多音字
- 利用matlab命令画出以下信号的波形,大连理工大学 信号与系统实验三报告
- HandBrake 开源视频转码器、编码转换器、格式转换器
- Mac锁屏 设置快捷键
- 计算机入门新人必学,电脑新手入门教程 让你快速上手
- 百度paddlepaddle入门讲解第一周内容
- crt格式证书转pem格式证书
- 神马笔记 版本1.7.0——辅助编辑·缘起篇
- Eclipse使用指南
- 介绍国产的PHP MVC框架:FleaPHP
- uboot代码详细分析.pdf
- 乐思蜀:我们不做网络民工
热门文章
- 思科(Cisco)交换机软件版本升级步骤
- 介绍c语言的英语论文,c语言中英文翻译资料毕业论文.doc
- # 2017-2018-1 20155312《信息安全技术》实验二——Windows口令破解实验报告
- 电信运营商用户流失分析
- matlab圆周卷积计算方法,线性卷积与圆周卷积的计算.doc
- 【毕业答辩】值得所有毕业生收藏的论文答辩技巧!
- Arduino 光敏传感器 LCD1602A
- PB多线程的实现与线程池设计
- 全国计算机一级历年选择题,全国计算机一级考试试题MS_Office(历年真题_选择题)...
- 数据挖掘过来人的建议