JQuery plugin笔记

作者: xingkong_s | 来源:发表于2015-12-07 18:04 被阅读224次

饥人谷_李栋


1.概述
2.插件实例
3.this相关


一、概述
1.目的

  • 为了扩展jQuery的功能

2.实现方式

  • jquery添加方法
    //$.method
$.goToTop = function(){
       $('body').scrollTop(0)
     }
$('button').click(function(){
       $.goToTop()
     })
  • 给**.fn**添加方法 //.fn.method
$.fn.goToTop=function(){
      this.click(function(){
      $('body').animate({scrollTop:0})
    })
}
$('button').goToTop()

二、插件实例

1.回到顶部

//css部分
.goToButton{
  position:fixed;
  right:10px;
  bottom:60px;//为了在jsbin里面看到效果
  width:50px;
  height:50px;
  background:#bbb;
  border-radius:2px;
}
.goToButton-arrow{
  border:10px solid white;
  border-color:transparent transparent white;
  position:absolute;
  top:50%;
  left:50%;
  margin-top:-15px;
  margin-left:-10px;
}
//js部分
//构建、插入div
var $button=$('<div class="goToButton"></div>')
  $('body').append($button)  
 var $arrow=$('<div class="goToButton-arrow"></div>') 
  $arrow.appendTo($button)
  //关键语句
$.goToTop=function(){
    $button.click(function(){
    $('html,body').animate({scrollTop:0})
  })
}
                 
$.goToTop() 

具体实例参照效果
2.手风琴

//html内容ul>li*3>p{$}+p>img
//js部分
$.fn.accordion=function(object){
  var to=object.to
  this.on('click','li',function(){
    var $li=$(this)
    if($li.hasClass(to)){
      $li.removeClass(to)
    }else{
      $li.addClass(to).siblings().removeClass(to)
    }
  })
}
$('ul').accordion({to:'open'})

具体实例参照效果
3.简单轮播

//css部分 :外部一个容器,绝对定位,设置left:0
//js部分
//简单实现
// var i=0
// setTimeout(function step(){
//   i++
//   if(i==3){i=0}
//   $('ul').animate({left:i*(-121)})
//   setTimeout(step,3000)
// },3000)
//部分改进后实现
$.fn.slides=function(){
  var currentIndex=0
  
  this.each(function(){
    var $currentUl=$(this)
  
var imagecount=$currentUl.children('li').length
  var imagewidth=$currentUl.children('li').first().width()
  setTimeout(function step(){
    currentIndex++
    if(currentIndex==imagecount){currentIndex=0}
    $currentUl.animate({left:currentIndex*(-imagewidth)})
    setTimeout(step,2000)
  },2000)
 }) 
}
$('ul').slides()

具体实例参照效果


4.知识扩展
由于代码中多次用到this所以搜了下
//因为看到这里有this的总结,所以把相关的内容移到了这里

  • prototype
$.fn.xxx = function(opt){}

是为jquery的prototype定义了函数,
这样, 任何一个jquery对象都可以使用这个成员函数,
//Jquery插件的一种方法
//你需要知道的是.fn = jQuery.prototype =.prototype

  • extend
$.fn.extend()

在jquery中重新定义了extend的使用方法,
如果只有一个参数, 那么就是扩展本身, 即.fn.extend({}), //就是用{}对象扩展.fn, 也就是jquery的prototype, 这样, 和上面的prototype就一样了

还有一种写法就是

$.extend($.fn, {}); 

//这个extend不是一个参数,它作用是用后面的扩展前面的, 即用{}扩展了$.fn, 还是一个意思

  • this相关

1.关于$(this)和this, 你关键还是要知道this表示的是什么:

  • 如果this是一个dom元素 -> $(this)是一个jquery元素,
  • 如果this是一个jquery元素 -> $(this)还是一个jquery元素,

//虽然你用==去判断两者是不同的, 但是他们内容都是一样的

2.关于this和$(this)还要注意一点

$('.abc').click(function(){});

//其中this是dom元素, $(this)是jquery元素,

而写插件的时候

由于是扩展prototype, 所以this是对象实例,
this就是jquery对象, $(this)还是jquery对象,
他们虽然不是同一对象, 但是内容是完全相同的

总结几点:

  • 函数里面的this 代表 函数的调用者
  • jquery里面 this代表jquery对象
  • 一般jq回调函数里都代表dom
  • this代表当前的作用域

以上实例都只是简单实现,期待进一步学习后改进...

相关文章

网友评论

    本文标题:JQuery plugin笔记

    本文链接:https://www.haomeiwen.com/subject/nbdehttx.html