【javascript详细说明】js封装插件的方法

第一种方法:生成对象的原始模式

一个对象添加实例方法和属性,我们可以采用上述的方式,即使用prototype关键字进行赋值,格式如下:

对象名称.prototype = {
属性一 : 属性值,
属性二 : 属性值,
方法一 : function(参数列表) {
    方法体;
},
方法二 : function(参数列表) {
    方法体;
}
}

可以按照如上方式对一个对象进行多个属性和方法的定义,这样在new一个对象后,就可以使用实例名称.属性或方法来获取属性或执行方法了。

相当于
var XX= new Object();
XX.yy = 'dd'; 
XX是Onject对象的实例 

注意:new Object():创建一个对象,可以理解为创建一个对象并传入一个参数,只是这个参数没有而已。构造函数

//封装成JS插件
var whir = window.whir || {}; 
whir.res = {
    pageVersion: "",
    loadJs:function(name,url,callback){},
    linkJs:function(url){}
}
//调用该插件
<script>
whir.res.pageVersion = "1002";  //页面版本,用于检测是否需要更新缓存  
whir.res.loadJs("jquery", "/gfdzp201508257998/Turntable/Script/jquery-1.8.3.min.js",  
     function () {  
         whir.res.loadJs("turntable", "/gfdzp201508257998/Turntable/Script/whir.turntable.js", null);  
     });  
whir.res.linkJs("/gfdzp201508257998/Turntable/Style/css_whir.css");  
</script>

文章来自:http://blog.csdn.net/a497785609/article/details/48321405

 第二种插件方法:$.fn.YouPlugin定义这类插件

定义这类插件的开发框架是: 
$.fn.YouPlugin = function (options) {...} 
为了防止一些偷懒的人,我们需要设置一些默认值,当它没有设置的时候,我们就用这些默认值。 
var defaultVal = { 
Text: 'Your mouse is over', 
ForeColor: 'red', 
BackColor: 'gray' 
}; 
那默认值和用户传进来的值是怎么联合在一起的呢?这个就需要我们在开篇的时候讲到的$.extend()知识了。 
var obj = $.extend(defaultVal, options); 
这样子的话,就把用户自定义的值覆盖了默认用户的值。如果用户没定义值,就用系统自定义的。

//封装对象方法的插件,$.fn对象后面增加一个属性名
$.fn.scrollpage = function(options) {  //options 经常用这个表示有许多个参数。 
        var defaultoption = {
            'preClass':'pre',
            'nextClass':'next',
            'scrollClass':'widget-content',
            'scrollWidth':300,
            'totalWidth':1200,
            'autoScroll':false
        }; //默认值
        options = $.extend(defaultoption, options || {});  //用户自定义的值覆盖了默认用户的值
        //下面就是写代码阶段
        var $wrapper = $(this),
            $pre = $wrapper.find('.' + options.preClass),
            $next = $wrapper.find('.' + options.nextClass),
            $scrollblock = $wrapper.find('.' + options.scrollClass),
            $scrollleft = Math.abs($scrollblock.position().left) || 0,
            $left = 0,
            timeid = '';
        
        $scrollblock.width(options.totalWidth);
        
        $pre.on('click', function(){
            if (!$scrollleft) {
                return;
            }else if ($scrollleft <= options.scrollWidth) {
                $left = 0;
            }else {
                    $left += options.scrollWidth;
            }
            $scrollblock.animate({'left': $left},'normal', function(){
                    $scrollleft = Math.abs($left);
                    if (options.autoScroll && timeid) {
                        clearInterval(timeid);
                        autoScroll();
                    }
                });
                return false;
        });
        
        $next.on('click', function(){
            if ($scrollleft >= options.totalWidth - options.scrollWidth) {
                return;
            }else if (parseInt($scrollleft) + parseInt(options.scrollWidth)*2 > options.totalWidth) {
                $left = -options.totalWidth + options.scrollWidth;
            }else {
                $left -= options.scrollWidth;
            }
            $scrollblock.animate({'left': $left},'normal', function(){
                $scrollleft = Math.abs($left);
                if (options.autoScroll && timeid) {
                    clearInterval(timeid);
                    autoScroll();
                }
            });
            return false;
        });
        
        var autoScroll = function() {
            timeid = setInterval(function(){
                if ($scrollleft >= options.totalWidth - options.scrollWidth) {
                    $left = 0;
                }else if (parseInt($scrollleft) + parseInt(options.scrollWidth)*2 > options.totalWidth) {
                    $left = -options.totalWidth + options.scrollWidth;
                }else {
                    $left -= options.scrollWidth;
                }
                $scrollblock.animate({'left': $left},1000, function(){
                    $scrollleft = Math.abs($left);
                });
            }, 4000);
        };
        
        if (options.autoScroll) {
            autoScroll();
        }
        
    };
//调用该插件方法
<script>
$(document).ready(function () { 
$('#div1').scrollpage({ 
'preClass': 'pre', 
'nextClass': 'next', 
'scrollClass': 'widget-content'
}); 
$('#div2').scrollpage({ 'autoScroll': true }); 
}); 
</script>

文章来自:http://www.jb51.net/article/30071.htm

第三种方法:Prototype属性用法

;( function( window ) {
    function mobilecheck() {
        ...//可以加 个函数
    }
  function UISearch(el,options){
      this.el=el;
      this.inputEl = el.querySelector( 'form > input.sb-search-input' );
      this._initEvents();
  }
  //用prototype给对象添加函数
  UISearch.prototype={
      _initEvents:function(){
          var self=this,
          initSearchFn=function(ev){
              ev.stopPropagation();
              self.inputEl.value = self.inputEl.value.trim();
              if(!classie.has(self.el,'sb-search-open')){
                  //open it
                  ev.preventDefault();
                  self.open();
              }else if(classie.has(self.el,'sb-search-open') && /^\s*$/.test( self.inputEl.value )){
                  //close it //任何空白字符
                  ev.preventDefault();
                  self.close();
              }
          };
          this.el.addEventListener('click',initSearchFn);
          this.el.addEventListener('touchstart',initSearchFn);
          this.inputEl.addEventListener('click',function(ev){ ev.stopPropagation();});
          this.inputEl.addEventListener('touchstart',function(ev){ ev.stopPropagation();})
      },
      open:function(){
              var self=this;
              classie.add(this.el,'sb-search-open');
              //focus the input
              if(!mobilecheck){
                  this.inputEl.focus();
              }
              //close the search input if body is chicked
              var bodyFn=function(ev){
                  self.close();
                  this.removeEventListener('click',bodyFn);
                  this.removeEventListener('touchstart',bodyFn);
              };
              document.addEventListener('click',bodyFn);
              document.addEventListener('touchstart',bodyFn);
      },
      close:function(){
          this.inputEl.blur();
          classie.remove(this.el,'sb-search-open');
      }
  }
  window.UISearch = UISearch;
} )( window );

第二种方式:

( function( window ) {

'use strict';
function classReg( className ) {
  return new RegExp("(^|\\s+)" + className + "(\\s+|$)");
}
var hasClass,addClass,removeClass;
if('classList' in document.documentElement){
  hasClass=function(elem,c){
    return elem.classList.contains(c);
  };
  addClass=function(elem,c){
    elem.classList.add(c);
  };
  removeClass=function(elem,c){
    elem.classList.remove(c); 
  };
}else{
  hasClass=function(elem,c){
    return classReg(c).test(elem.className);
  };
  addClass=function(elem,c){
    if(!hasClass(elem,c)){
      elem.className=elem.className+' ' + c;
    }
  };
  removeClass=function(elem,c){
    elem.className=elem.className.replace(classReg(c),' ');
  };
}
function toggleClass(elem,c){
  var fn=hasClass(elem,c) ? removeClass : addClass;
  fn(elem,c);
}
var classie={
    //full names
    hasClass:hasClass,
    addClass:addClass,
    removeClass:removeClass,
    toggleClass:toggleClass,
    //short names
    has:hasClass,
    add:addClass,
    remove:removeClass,
    toggle:toggleClass
};
// transport
if ( typeof define === 'function' && define.amd ) {
  // AMD
  define( classie );
} else {
  // browser global
  window.classie = classie;
}

})( window );

原文来自:svn/app/plug/Document/demo.html

文章来自:http://www.cnblogs.com/mindsbook/archive/2009/09/19/javascriptYouMustKnowPrototype.html

中间件的支持node、AMD、CMD

if (typeof(module) !== 'undefined')
 {
   module.exports = pluginName;
 }
 requirejs(AMD) support
 if (typeof define === 'function' && define.amd) {
   define([], function () {
       'use strict';
       return pluginName;
   });
 }
 seajs(CMD) support
 if (typeof define === 'function') {
   define([], function () {
       'use strict';
       return pluginName;
   });
 }

原文来自:http://www.jb51.net/article/61694.htm

 

第三种方法:jQuery插件开发精品(更深层的剥折精品)

文章来自:http://www.jb51.net/article/74491.htm

 

posted @ 2016-03-15 10:35  chenguiya  阅读(1577)  评论(0编辑  收藏  举报