`

JQuery插件开发相关

 
阅读更多
翻看大多数js工具源码时经常遇到这样的代码:
代码1:
(function($){
    // some code here...
})(JQuery);

今天仔细琢磨了一下,这个代码实际的功能就是定义了一个匿名函数,然后在页面load完毕之后执行了这个函数。它的简化版是:
代码2:
(function(){
//some code here...
})();
这说明代码1中其实是将JQuery这个对象作为参数传递给了匿名函数,而匿名函数中给参数(形参)起了个另外的名字$。

记录一下今天在实现一个将“您有新消息”内容在页面中闪烁功能的过程:
这个功能如果简单实现起来,只需要像下面这样就可以了:
window.setInterval(function(){
      $("#targetId").toggle();
},500);
只需要这样,这个id为targetId的元素就开始在页面中闪烁了。但是,我希望我能很方便的让其他页面元素也能很轻松的实现这样的功能,并且我还能随时控制说让它不要再闪烁了。我需要实现一个像jqueryUI中$("#modal-dialog").dialog();这样的工具。
这需要扩展jquery的函数了,借助上面的原理,有了下面的代码:

 (function($){
	$.fn.extend({
		flash:function(opt){
			$(this).each(function(){
				var tmp = $(this);
				window.setInterval(function(){
					$(tmp).toggle();
				},500);
			});
		}
	});
})(Jquery);


这里,我用flash来作为这个闪烁功能的函数名,opt是传递的参数。但是,这个样子,这个方法只能调用一次,再多调用的话,元素的闪烁会加快甚至失控,因为每次都直接toggle了。所以我需要有一个数组来记录这些元素的interval对象。
 (function($){
<span style="white-space:pre">	</span>var _intervalArray = [];
	$.fn.extend({
		flash:function(opt){
			$(this).each(function(){
				var tmp = $(this);	
 				var targetId = tmp .attr("id");
 				var interval = _intervalArray[targetId];
				if(!interval){
					interval = window.setInterval(function(){
						$(tmp).toggle();
					},500);
					_intervalArray[targetId] = interval;
				}
			});
		}
	});
})(Jquery);


js是一个很奇怪的语言,字符串也能作为数组数组访问index。这里我通过一个数组来记录它,在下一次再调用的时候,如果发现已经在闪烁了就不要再interval了。
我希望通过$("SELECTOR-CODE").flash();来启动闪烁,通过$("SELECTOR-CODE").flash("stop");来停止闪烁,具体如下:
(function($){
 	var _intervalArray = [];
 	$.flashOnTarget = function flashOnTarget(targetId){
 		$("#"+targetId).toggle();
 	};
 	$.fn.extend({
 		flash:function(opt){
 			var target = $(this);
 			for(var i=0; i<target.length; i++ ){
 				var targetId = $(target[i]).attr("id");
 				var interval = _intervalArray[targetId];
 				if(opt=='stop' && interval){
 					window.clearInterval(interval);
					 $(target[i]).show();
 				}else{
 					if(!interval){
 						interval = window.setInterval("$.flashOnTarget('"+targetId+"')",300);
 						_intervalArray[targetId] = interval;
 					}
 				}
 			}
 			return target;
 		}
 	});
})(jQuery);


最后这个代码中,我把setInterval中的匿名函数单独独立出来了,为了能够把代码都统一放置在
(function($){

})();
中,我把这个函数定义成了一个jquery的一个扩展函数。这里还有一个有趣并值得注意的地方,window的setInterval和setTimeout两个函数是没办法传递参数的,为了变相的传递参数,只能把它写成一个字符串了。
下面是完整代码:
<html>
<head>
<title></title>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript">
$(function(){
	$("span").flash({cycle:100});
	window.setTimeout(function(){
		$("#sp1,#sp2").flash("stop");
	},5000);
});
(function($){
	var _intervalArray = [];
	$.flashOnTarget = function flashOnTarget(targetId){
		$("#"+targetId).toggle();
	};
	$.fn.extend({
		flash:function(opt){
			var target = $(this);
			for(var i=0; i<target.length; i++ ){
				var targetId = $(target[i]).attr("id");
				var interval = _intervalArray[targetId];
				if(opt=='stop' && interval){
					window.clearInterval(interval);
					$(target[i]).show();
				}else{
					if(!interval){
						interval = window.setInterval("$.flashOnTarget('"+targetId+"')",opt? (opt.cycle ? opt.cycle:400) : 400);
						_intervalArray[targetId] = interval;
					}
				}
			}
			return target;
		}
	});
})(jQuery);
</script>
<style>
span{
 border:1px solid red;
 color:red;
 padding:5px;
}
</style>
</head>
<body>
<span id="sp1">您有新消息1</span><br><br>
<span id="sp2">您有新消息2</span><br><br>
<span id="sp3">您有新消息3</span><br><br>
<span id="sp4">您有新消息4</span><br><br>
</body>
</html>











分享到:
评论

相关推荐

    jQuery插件开发学习

    下面我们将详细探讨jQuery插件开发的相关知识点。 首先,了解jQuery的核心概念是至关重要的。jQuery通过简洁的语法封装了大量JavaScript的常用功能,如选择器(用于选取DOM元素)、DOM操作(添加、删除或修改元素)...

    jQuery插件开发全解析

    ### jQuery插件开发全解析 #### 一、引言 jQuery作为一款优秀的JavaScript库,在前端开发领域具有举足轻重的地位。它简化了许多常见的JavaScript任务,使得开发者能够更轻松地处理DOM操作、事件处理以及Ajax交互等...

    JQuery插件开发

    **jQuery插件开发** 在Web开发领域,jQuery是一款广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画效果和Ajax交互。jQuery插件是扩展jQuery功能的一种方式,允许开发者根据需求定制各种功能,如表单验证、...

    jquery 插件开发 pdf

    jQuery插件开发是扩展这个库功能的一种常见方式,使得开发者能够根据项目需求创建自定义功能。以下是对jQuery插件开发的详细讲解: 1. **插件基础** - jQuery插件通常是通过扩展jQuery对象的原型链来实现的,这...

    jQuery插件开发及常用插件大全.zip

    jQuery插件开发及常用插件大全PDF;jQuery插件开发.pdf、jQuery常用插件大全.pdf

    jQuery插件开发详解

    《jQuery插件开发详解》 在Web开发领域,jQuery是一个广泛应用的JavaScript库,它极大地简化了DOM操作、事件处理和动画制作。对于开发者而言,掌握jQuery插件的开发技巧是提升工作效率的重要一环。本篇将深入探讨...

    jQuery插件开发的五种形态小结

    总结来说,jQuery插件开发中的五种形态小结通过一系列的示例和说明,为开发者展示了如何创建一个高效、可维护的插件。这五个形态涉及到了代码的独立性、链式操作、插件的可配置性、生命周期的管理、无冲突处理以及...

    jquery插件开发文档

    jQuery插件开发是一项重要的技能,可以让开发者通过创建可复用的代码片段来增强jQuery库的功能。根据提供的文档内容,以下是一些关于jQuery插件开发的关键知识点: 1. 基本插件结构 在编写jQuery插件时,首先要了解...

    JQuery插件的写法 最常用的jquery插件开发方式(教程合集).zip

    JQuery插件的写法 最常用的jquery插件开发方式(教程合集) jquery插件的例子 jQuery插件开发教程_看这一本就行了 JQuery插件写法 jq插件最常用的写法

    jquery 插件开发

    jquery插件开发是提高前端开发效率的重要方式之一。在本篇文章中,我们将详细解析如何通过$.extend()方法扩展jQuery、如何通过$.fn向jQuery添加新的方法以及如何使用$.widget()方法应用jQuery UI的部件工厂方式创建...

    通用 JQuery 插件 开发

    **通用JQuery插件开发详解** 在Web开发领域,jQuery是一个广泛使用的JavaScript库,它极大地简化了DOM操作、事件处理、动画制作以及Ajax交互。由于其简洁的API和丰富的功能,jQuery成为创建交互式网页的强大工具。...

    jQuery插件开发详细教程

    jQuery插件开发是一项能够极大提升前端开发效率和代码可复用性的技术。在学习开发jQuery插件之前,需要先了解一些基础概念和最佳实践,以及避免在开发过程中的一些常见陷阱。 首先,我们需要掌握什么是jQuery插件。...

    跟我一起学JQuery插件开发

    首先,要学习jQuery插件开发,我们先要理解插件的概念。jQuery插件本质上是通过某种机制对jQuery核心模块进行扩展的方法或额外功能。在编写属于自己的插件时,我们不仅可以提高开发效率,还可以在不同的项目中重复...

    JQuery插件开发 + 插件

    下面我们将深入探讨jQuery插件开发的相关知识点。 一、jQuery插件基础 1. 插件定义:jQuery插件是扩展jQuery功能的小型代码模块,它们允许开发者将自定义的行为和功能添加到网页中。 2. 创建插件的基本结构: ```...

    jQuery插件开发学习手册

    ### jQuery插件开发详解 #### 一、引言 jQuery插件开发是前端开发者扩展jQuery功能的重要手段。本文档旨在帮助读者快速掌握jQuery插件的开发技巧,涵盖类级别插件与对象级别插件的创建方式,以及如何避免命名冲突...

    详解jQuery插件开发方式

    jQuery插件开发是创建可复用、模块化代码的一种有效方式,它允许开发者扩展jQuery的功能,满足特定需求。本文将深入探讨jQuery插件开发的几个关键点:jQuery扩展、私有域以及定义插件的基本步骤。 首先,我们来看...

    老司机带你解读jQuery插件开发流程

    在学习jQuery插件开发之前,需要了解jQuery库本身的功能和组成。jQuery是一个快速、小巧且功能丰富的JavaScript库,它简化了HTML文档遍历、事件处理、动画和Ajax交互等操作。在进行jQuery插件开发时,尤其需要关注...

Global site tag (gtag.js) - Google Analytics