当前位置:   article > 正文

Jquery插件的编写及使用分享_用jquery编写可以改变大小的插件

用jquery编写可以改变大小的插件

jQuery插件开发在项目中的使用是非常方便的,那么如何来写一个jQuery插件?接下来我们就来看一看jQuery插件的编写及使用。

引言:

在项目中不同页面经常要用到已经写好的交互,比如弹窗,比如下拉菜单,比如选项卡,比如删除...

此时如果每次都把代码copy一份无疑是一件比较麻烦并且无趣的事情,而且个人认为有些low了,我们可是要追寻

高大上的00后有为青年呢~可是该如何高大上呢?这时jQuery自定义插件开发来了,第一次听到插件开发觉得如此happy,

遂动手网上查找资料进行学习,如下,我用自己的语言将插件开发的程序步骤写出来,如有错误,欢迎指正。

1:jQuery插件开发分为类级别开发和对象级别开发,因为类级别开发在真实项目中几乎不用,下面只对象级别进行探究。

给jQuery扩展插件添加静态方法:就是给jQuery这个类添加方法这种方法叫做静态方法(不常用)

  1. $.hello = function(){//给jQuery这个类添加静态方法(不常用)
  2. console.log('我是jQuery的静态方法')
  3. }
  4. $.hello();

a , 首先准备好一个架子,如下:

b, 这个架子是你编写插件代码要写入的空间,下面简单解释一下这个架子:

  • 1)在jQuery环境下封装自己的插件,首先为避免与其他库的冲突,需要在插件的后面传一个jQuery参数进去,对应的函数里面的参数写入$
  • 2)未避免出现问题,需在插件的前后加入分号(分号的增加并不会影响程序的运行)

2:再上一个架子

  1. ;(function($){
  2. //通过$.fn.方法名 方法是添加到jQuery的原型当中的
  3. $.fn.tab = function(options){
  4. var defaults = {
  5. //各种参数,各种属性
  6. }
  7. var options = $.extend(defaults,options);
  8. this.each(function(){
  9. //各种功能
  10. });
  11. return this;
  12. }
  13. })(jQuery);

这个架子是个什么东西呢?原来他是jQuery官方提供的一个标准化的开发模式,这里简单地介绍一下,不作详要说明,细节有兴趣的童鞋可以自己百度一下。

$.fn.tab 这个tab是你这个功能插件的名字,可任意改变名字,你自己知道就好了。

var options = $.extend(defaults,options); 这个是利用extend方法把 defaults对象的方法属性全部整合到 options里,

也就是options继承了defaults对象的方法以及属性。这个defaults和options名字是可以随意更改的,只要是满足js的命名规范。

this.each(function(){});就不介绍了,下面会通过一个实例表现它,这里你只需要知道他是实现功能代码的地方就可以啦~

至于return this; 就留到实例结束后面再说,这样做肯定是有原因的啦,别心急~

3:心细的girls or boys 肯定知道这个实例是什么啦,没错,是tab选项卡~

下面以tab选项卡的方式来explore这个插件的编写。

a: 先备好html,

  1. <div class="container">
  2. <ul class="option-list">
  3. <li class='current'>新闻频道</li>
  4. <li>军事频道</li>
  5. <li>体育频道</li>
  6. <li>娱乐频道</li>
  7. <li>音乐频道</li>
  8. </ul>
  9. <ul class="card-list">
  10. <li class='current'>这是新闻频道</li>
  11. <li>这是军事频道</li>
  12. <li>这是体育频道</li>
  13. <li>这是娱乐频道</li>
  14. <li>这是音乐频道</li>
  15. </ul>
  16. </div>

b:在准备好css,

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. }
  5. ul {
  6. list-style: none;
  7. }
  8. .container {
  9. width: 800px;
  10. margin: 50px auto;
  11. }
  12. .container .option-list {
  13. height: 40px;
  14. border-bottom: 1px solid #ccc;
  15. border-left: 1px solid #ccc;
  16. }
  17. .container .option-list li {
  18. float: left;
  19. padding: 0 20px;
  20. height: 39px;
  21. border-top: 1px solid #ccc;
  22. border-right: 1px solid #ccc;
  23. line-height: 40px;
  24. background-color: #eee;
  25. cursor: pointer;
  26. }
  27. .container .option-list li.current {
  28. height: 40px;
  29. background-color: #fff;
  30. }
  31. .container .card-list {
  32. border: 1px solid #ccc;
  33. border-top: none;
  34. }
  35. .container .card-list li {
  36. display: none;
  37. height: 300px;
  38. padding: 20px;
  39. }
  40. .container .card-list li.current {
  41. display: block;
  42. }

c,页面是这样的:

d,ok,页面已经准备就绪,现在就来看看jQuery插件写法,先上代码

  1. ;(function($){
  2. $.fn.tab = function(options){
  3. var defaults = {
  4. //各种参数,各种属性
  5. }
  6. var options = $.extend(defaults,options);
  7. //各种功能 //可以理解成功能代码
  8. this.each(function(){
  9. $('.option-list').on('click','li',function(){
  10. $(this).addClass('current').siblings().removeClass('current');
  11. var $index = $(this).index();
  12. $('.card-list li').eq($index).addClass('current').siblings().removeClass('current');
  13. })
  14. });
  15. return this;
  16. }
  17. })(jQuery);

f,这个时候只需要看this.each下的功能代码,学过jQuery的同学都知道代码实现,这里主要就调用插件和配置参数这一块来进行探究。

4,在html代码里我们只需要:

  1. <script>
  2. $(document).ready(function(){//jQuery入口代码
  3. $('.container').tab();//启动在jQuery原型中定义的tab方法
  4. })
  5. </script>

a,找到外部容器,并调用你所写的tab方法(就是你所写的插件名字):

$.fn.tab = function(options){}

b,敏感的童鞋肯定发现了功能代码里面的class元素以及事件是被写死的,要是我们在另外一个页面写的class和事件需求和这个插件的不同,

除了改插件源码之外这个插件就没法用用了,作为可扩展性的插件我们怎么可以把它写死呢?嗯哼?当然不可以啦~

好,就让我们一起来解决它吧:

1)请看下面

  1. $.fn.tab = function(options){
  2. var defaults = {//配置此处
  3. //各种参数,各种属性
  4. }

2) 没错,就在这里配置它,我们可以看到哪些东西被写死了呢?下图:

3) 现在我们可以在default对象里面绘画你的小空间啦~见下图:

3)有的同学可能会疑惑为什么用options调用呢?其实上面已经说过啦,因为extends将default对象的属性以及方法都整合到了options里。

这时候只需要用options调用就可以了。

4)同样的如果需求是把click事件改为mouseover事件,此时我们需要用到on() 函数设置事件 这样就方便我们改事件参数啦,如下:

  1. var defaults = {
  2. //各种参数,各种属性
  3. title : '.option-list',
  4. content: '.card-list li',
  5. current : 'current',
  6. type : 'mousemove',
  7. }

5)此时因为需求是mouseover,这是就不需要改插件源码啦,直接在html里的js代码(or你自己的js总文件里)进行相应的变化就ok啦,如下:

$(options.title).on(defaults.type,'li',function(){

*此时在这里更改class和事件就很方便啦,温馨提示,class改变虽好,可别忘了改对应的css样式名字哦,要成双成配呢~

5:jQuery最强大的特性之一莫过于链式操作啦,此时如果你在$('.tab').tab()后面追加操作,你会发现无法实现,如下:

  1. $(document).ready(function(){//jQuery入口代码
  2. $('.container').tab().find('.option-list>li').css('background', 'red');
  3. //启动在jQuery原型中定义的tab方法
  4. })

但是当你return this把对象返回出去的时候你会发现又重新实现了~  

上面种方法需要写插件内部修改对应的值(不方便),但是下面这种方法要在创建插件的外面修改对应的值

6:编写jquery插件中的闭包demo和编写jQuery插件的另一种写法

另一种编写选项卡创建的形式

  1. //HTMLscript里面的代码
  2. $(document).ready(function(){//jQuery入口代码
  3. //要先引用jQuery插件 在引用人为编写的插件
  4. $('.container').tab({
  5. title: '.option-list',
  6. content: '.card-list li',
  7. current: 'current',
  8. type: 'mousemove',
  9. });//启动在jQuery原型中定义的tab方法
  10. })
  1. //自己编写创建内部的代码
  2. ;(function($){//闭包函数 避免污染全局变量
  3. //往jQuery原型上面添加tab方法
  4. $.fn.tab = function(defaults){
  5. //如果用户不在tab方法内部传递对应的参数我们应当做什么
  6. //给tab方法设置默认值
  7. defaults = defaults ? defaults : {};
  8. var title = defaults.title ? defaults.title : null;
  9. var content = defaults.content ? defaults.content : null;
  10. var current = defaults.current ? defaults.current : null;
  11. var type = defaults.type ? defaults.type : null;
  12. //各种功能 //可以理解成功能代码
  13. this.each(function(){
  14. $(title).on(type,'li',function(){
  15. $(this).addClass(current).siblings().removeClass(current);
  16. var $index = $(this).index();
  17. $(content).eq($index).addClass(current).siblings().removeClass(current);
  18. })
  19. });
  20. return this;
  21. }
  22. })(jQuery);

编写jQuery插件中的闭包特性

  1. //闭包特性,
  2. //1. 避免内部临时变量影响全局空间,
  3. //2. 插件内部继续使用$作为jquery别名
  4. /**
  5. 定义一个匿名函数--闭包
  6. **/
  7. ;(function($){//$作为匿名函数的参数
  8. //这里编写插件代码,可以继续使用$作为jquery的别名
  9. /**
  10. 定义一个局部变量foo,仅函数内部可以访问,外部无法访问
  11. --利用闭包特性,可以避免内部临时变量影响全局空间,又可以再插件内部继续使用$作为jquery的别名
  12. --独立,有关联,且无污染
  13. **/
  14. var foo;
  15. var bar = function(){
  16. foo="aa";
  17. alert(foo);
  18. /**
  19. 1.匿名函数内部的函数都可以访问foo
  20. 2.匿名函数的外部调用bar()的时候,也可以再bar()内部访问到foo,但是在匿名函数外部直接访问foo是不可以的
  21. **/
  22. }
  23. /**
  24. 功能:扩展匿名函数内的私有函数bar()到全局可访问范围
  25. 调用:在匿名函数外通过jQuery.BAR()来访问闭包内定义的函数bar(),且,bar()必然是可以访问foo私有变量的
  26. **/
  27. $.BAR=bar;
  28. })(jQuery);//将jquery作为实参传递给匿名函数
  29. $(function(){
  30. $.BAR();
  31. })
  32. /**
  33. 以上概念简单介绍了jquery的闭包概念,显然闭包不是几句话能讲清楚的
  34. 但对于插件的制作来说,只需要知道所有插件的代码必须放在下面的代码内部就可以了
  35. ;(function(){
  36. //填写jquery插件代码
  37. })(jQuery);
  38. **

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/227954
推荐阅读
相关标签
  

闽ICP备14008679号