jquery 扩展插件方法
分析插件jquery.countdown.js
- (function($) {
- $.fn.countdown = function(options) {
- // default options
- var defaults = {
- attrName : 'data-diff',
- tmpl : '<span class="hour">%{h}</span>小时<span class="minute">%{m}</span>分钟<span class="second">%{s}</span>秒',
- end : '已结束',
- afterEnd : null
- };
- console.log(options);
- options = $.extend(defaults, options);
- console.log(options);
- // trim zero
- function trimZero(str) {
- return parseInt(str.replace(/^0/g, ''));
- }
- // convert string to time
- function getDiffTime(str) {
- var m;
- if ((m = /^(\d{4})[^\d]+(\d{1,2})[^\d]+(\d{1,2})\s+(\d{2})[^\d]+(\d{1,2})[^\d]+(\d{1,2})$/.exec(str))) {
- var year = trimZero(m[1]),
- month = trimZero(m[2]) - 1,
- day = trimZero(m[3]),
- hour = trimZero(m[4]),
- minute = trimZero(m[5]),
- second = trimZero(m[6]);
- return Math.floor((new Date(year, month, day, hour, minute, second).getTime() - new Date().getTime()) / 1000);
- }
- return parseInt(str);
- }
- // format time
- function format(diff) {
- var tmpl = options.tmpl, day, hour, minute, second;
- day = /%\{d\}/.test(tmpl) ? Math.floor(diff / 86400) : 0;
- hour = Math.floor((diff - day * 86400) / 3600);
- minute = Math.floor((diff - day * 86400 - hour * 3600) / 60);
- second = diff - day * 86400 - hour * 3600 - minute * 60;
- tmpl = tmpl.replace(/%\{d\}/ig, day)
- .replace(/%\{h\}/ig, hour)
- .replace(/%\{m\}/ig, minute)
- .replace(/%\{s\}/ig, second);
- return tmpl;
- }
- // main
- return this.each(function() {
- var el = this,
- diff = getDiffTime($(el).attr(options.attrName));
- function update() {
- if (diff <= 0) {
- $(el).html(options.end);
- if (options.afterEnd) {
- options.afterEnd();
- }
- return;
- }
- $(el).html(format(diff));
- setTimeout(function() {
- diff--;
- update();
- }, 1000);
- }
- update();
- });
- };
- })(jQuery);
- 1、$.fn.countdown 为扩展jquery方法,函数名为countdown
- 2、 var defaults 相当于类里成员变量,
3、defaults = {
attrName : 'data-diff',
tmpl : '<span class="hour">%{h}</span>小时<span class="minute">%{m}</span>分钟<span class="second">%{s}</span>秒',
end : '已结束',
afterEnd : null
};
defaluts里的键值对提供属性,相当于类里成员函数的参数。
- 4、options = $.extend(defaults, options); 将options值合并到defaults,并返回合并结果
- 5、return this.each(function() ); 获取网页的的id或name值的并修改的函数操作
- 网页调用样例:
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8" />
- <title>Countdown Demo</title>
- <style>
- </style>
- <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
- <script src="jquery.countdown.js"></script>
- <script>
- $(function() {
- $('.J_countdown1').countdown();
- $('.J_countdown2').countdown({
- tmpl : '<span>%{d}</span>天<span>%{h}</span>小时<span>%{m}</span>分<span>%{s}</span>秒'
- });
- $('.J_countdown3').countdown({
- tmpl : '<span>%{d}</span>天, <span>%{h}</span>小时, <span>%{m}</span>分, <span>%{s}</span>秒'
- });
- });
- </script>
- </head>
- <body>
- <div class="J_countdown1" data-diff="10"></div>
- <div class="J_countdown1" data-diff="70"></div>
- <div class="J_countdown1" data-diff="3610"></div>
- <div class="J_countdown1" data-diff="86410"></div>
- <div class="J_countdown2" data-diff="21234567890"></div>
- <div class="J_countdown3" data-diff="21234567890"></div>
- </body>
- </html>
jquery 扩展插件方法的更多相关文章
- jQuery扩展插件以及正则相关函数练习
一.jQuery扩展插件 二.相关正则函数:
- JQuery扩展插件Validate—5添加自定义验证方法
从前面的示例中不难看出validate中自带的验证方法足以满足一般的要求,对于特别的要求可以使用addMethod(name,method,message)添加自定义的验证规则,下面的示例中添加了一个 ...
- Angular TypeScript开发环境集成jQuery扩展插件
集成步骤: 1.安装jquery极其扩展插件库ts定义文件 npm install jquery --save npm install --save-dev @types/jquery npm ins ...
- jQuery扩展插件
jQuery有多好用,大家有目共睹的,但是有时候不是每个功能都是万能的,有时候我们需要实现自己的功能,jQuery提供了很好的拓展功能,我们可以去拓展插件,更好的利用jQuery 查看官网,可知,有两 ...
- jQuery扩展插件和拓展函数的写法
<script type="text/JavaScript"> //jQuery插件的写法(需要传入操作对象) ;(function ...
- jQuery扩展工具方法
共享学习Jquery源码的一些东西 jQuery.extend({ expando : 生成唯一JQ字符串(内部) noConflict() : 防止冲突 ---------------- ...
- jquery扩展插件,让demo元素也可以resize
(function($, h, c) { var a = $([]), e = $.resize = $.extend($.resize, {}), i, k = "setTimeout&q ...
- jquery编写插件的方法
版权声明:作者原创,转载请注明出处! 编写插件的两种方式: 1.类级别开发插件(1%) 2.对象级别开发(99%) 类级别的静态开发就是给jquery添加静态方法,三种方式 1.添加新的全局函数 2 ...
- 再谈:jquery编写插件的方法
版权声明:作者原创,转载请注明出处! 编写插件的两种方式: 1.类级别开发插件(1%) 2.对象级别开发(99%) 类级别的静态开发就是给jquery添加静态方法,三种方式 1.添加新的全局函数 2. ...
随机推荐
- UI自动化,你值得拥有
去年春节联欢晚会,为了那张“敬业福”,全家都卯足了劲儿“咻一咻”,连节目都顾不上看了.当时我就想,要是能自动化该多好,不停点击屏幕,屏幕不疼手还疼呢,何况还不好分心,生怕错过了“敬业福”.玩“咻一咻” ...
- Nim游戏
目前有3堆石子,每堆石子个数也是任意的,双方轮流从中取出石子,规则如下:1)每一步应取走至少一枚石子:每一步只能从某一堆中取走部分或全部石子:2)如果谁不能取谁就失败. Bouton定理: 必败状态当 ...
- Vc6.0头文件的定义
Vc6.0头文件的定义 #ifndef __HEADER__ #define __HEADER__ int fun(int i); #endif
- 三种方法查看MySQL数据库的版本
1.使用-V参数 首先我们想到的肯定就是查看版本号的参数命令,参数为-V(大写字母)或者--version 使用方法: D:\xampp\mysql\bin>mysql -V 或者 D:\xam ...
- SQLserver中用convert函数转换日期格式
SQLserver中用convert函数转换日期格式 2008-01-23 15:47 SQLserver中用convert函数转换日期格式2008-01-15 15:51SQLserver中用con ...
- 对.net技术组件的分析和选择
.net很庞杂,学习最忌讳什么?为了学而学,而不是为了用而学.我们不是为了成为教师,所以不要成为书呆子,不要成为"博士",要从庞杂的技术群中选择自己需要的内容进行学习. 如果不加选 ...
- RapidJSON 代码剖析(一):混合任意类型的堆栈
大家好,这个专栏会分析 RapidJSON (中文使用手册)中一些有趣的 C++ 代码,希望对读者有所裨益. C++ 语法解说 我们先来看一行代码(document.h): bool StartArr ...
- pyhton 学习
官方学习文档 https://docs.python.org/3/tutorial/
- 线段树 poj 2991
我们只要把这些向量求和,最终所指的位置就是终点,因此我们只要维护好向量的区间和就可以了.对于第二个问题,我们可以用一个数组degree[i]表示第i个向量和第i-1一个向量当前的夹角,这样就有了当前的 ...
- Adapter的封装之路
原文:Adapter的封装之路 一.几种常见列表效果: 假如要用RecyclerView实现下面的几种效果,你会如何实现呢? 效果1:单布局效果 效果2:多布局效果 有多种Item布局 效果3 ...