jQuery插件制作之参数用法实例分析


Posted in Javascript onJune 01, 2015

本文实例讲述了jQuery插件制作之参数用法。分享给大家供大家参考。具体分析如下:

1、无参数实现文字阴影效果

jQuery.fn.shadow =function(){ 
 return this.each(function(){ 
  var $originalElement = jQuery(this); 
  for(var i = 0;i < 5;i++){ 
   $originalElement.clone() 
   .css({ 
    position :"absolute", 
    left :$originalElement.offset().left + i, 
    top :$originalElement.offset().top + i, 
    margin : 0, 
    zIndex : -1, 
    opacity : 0.1 
   }) 
   .appendTo("body"); 
  } 
 }) 
}

调用的例子:

$("h1").shadow();

2、简单的参数

jQuery.fn.shadow =function(slices,opacity,zIndex){ 
 return this.each(function(){ 
  var $originalElement = jQuery(this); 
  for(var i = 0;i < slices;i++){ 
   $originalElement.clone() 
   .css({ 
    position :"absolute", 
    left :$originalElement.offset().left + i, 
    top :$originalElement.offset().top + i, 
    margin : 0, 
    zIndex : zIndex, 
    opacity : opacity 
   }) 
   .appendTo("body"); 
  } 
 }) 
}

调用的例子:

$("h1").shadow(10,0.1,-1);

3、参数的映射

jQuery.fn.shadow =function(opts){ 
 return this.each(function(){ 
  var $originalElement = jQuery(this); 
  for(var i = 0;i < opts.slices;i++){ 
   $originalElement.clone() 
   .css({ 
    position :"absolute", 
    left :$originalElement.offset().left + i, 
    top : $originalElement.offset().top+ i, 
    margin : 0, 
    zIndex :opts.zIndex, 
    opacity : opts.opacity 
   }) 
   .appendTo("body"); 
  } 
 }) 
}

调用的例子:

$("h1").shadow({

    slices : 5,

    opacity : 0.25,

    zIndex : -1

});

 
4、默认的参数值(这个是最重要的)
jQuery.fn.shadow =function(options){ 
 var defaults = { 
  slices : 5, 
  opacity : 0.1, 
  zIndex : -1 
 }; 
 //options中如果存在defaults中的值,则覆盖defaults中的值 
 var opts = jQuery.extend(defaults,options); 
 return this.each(function(){ 
  var $originalElement = jQuery(this); 
  for(var i = 0;i < opts.slices;i++){ 
   $originalElement.clone() 
   .css({ 
    position :"absolute", 
    left :$originalElement.offset().left + i, 
    top :$originalElement.offset().top + i, 
    margin : 0, 
    zIndex :opts.zIndex, 
    opacity : opts.opacity 
   }) 
   .appendTo("body"); 
  } 
 }) 
}

调用的例子:

$("h1").shadow({

    opacity : 0.05

});

 
5、回调函数
jQuery.fn.shadow =function(options){ 
 var defaults = { 
  slices : 5, 
  opacity : 0.1, 
  zIndex : -1, 
  sliceOffset : function(i){ 
   return {x:i,y:i} 
  } 
 }; 
 //options中如果存在defaults中的值,则覆盖defaults中的值 
 var opts = jQuery.extend(defaults,options); 
 return this.each(function(){ 
  var $originalElement = jQuery(this); 
  for(var i = 0;i < opts.slices;i++){ 
   //调用回调函数 
   var offset = opts.sliceOffset(i); 
   $originalElement.clone() 
   .css({ 
    position :"absolute", 
    left :$originalElement.offset().left + offset.x, 
    top :$originalElement.offset().top + offset.y, 
    margin : 0, 
    zIndex :opts.zIndex, 
    opacity : opts.opacity 
   }) 
   .appendTo("body"); 
  } 
 }) 
}

调用的例子:

$("h1").shadow({

    sliceOffset : function(i){

       return {x : -i,y : -2 * i}

    }

});

6、可定制的默认值

jQuery.fn.shadow =function(options){ 
 //默认值被放在投影插件的命名空间里了 
 var opts =jQuery.extend({},jQuery.fn.shadow.defaults,options); 
 return this.each(function(){ 
  var $originalElement = jQuery(this); 
  for(var i = 0;i < opts.slices;i++){ 
   //调用回调函数 
   var offset = opts.sliceOffset(i); 
   $originalElement.clone() 
   .css({ 
    position :"absolute", 
    left :$originalElement.offset().left + offset.x, 
    top :$originalElement.offset().top + offset.y, 
    margin : 0, 
    zIndex :opts.zIndex, 
    opacity : opts.opacity 
   }) 
   .appendTo("body"); 
  } 
 }) 
} 
jQuery.fn.shadow.defaults= { 
 slices : 5, 
 opacity : 0.1, 
 zIndex : -1, 
 sliceOffset : function(i){ 
  return { x : i, y : i} 
 } 
}

默认值被放在了命名空间里,可以通过$.fn.shadow.default直接引用。而对$.extend()的调用也必须修改,以适应这种变化。由于现在所有对.shadow()的调用都要重用defaults映射,因此不能让他$.extend()修改它,因此要将一个空映射({})作为$.extend()的第一个参数,让这个新对象成为被修改的目标。

调用方法:

jQuery.fn.shadow.defaults.slices= 10;

$("h1").shadow({

    sliceOffset : function(i){

       return { x : -i, y : i}

    }

});

7、添加选择符表达式

/* 
 *添加选择符表达式 
 * 
 * 参数: 
 *  element:当前的DOM元素,大多数选择符都需要这个 
 *  index:Dom元素在结果集中的索引,这个参数对:eq()和:lt()等选择符比较有用 
 *  matches:包含解析当前选择符的正则表达式结果的数组。通常matches[3]是这个数组中 
 *    唯一有用的项;对于:a(b)形式的选择符而言,matches[3]项中包含着b,即圆括号中的 
 *    文本。 
 *  set:到目前为止匹配的整个DOM元素的集合,这个参数用的比较少。 
 * 
 */ 
jQuery.extend(jQuery.expr[':'],{ 
 'css' : function(element,index,matches,set){ 
  //修改之后的matches[3]:width < 100 
  var parts = matches[3].split(""); 
  var value =parseFloat(jQuery(element).css(parts[0])); 
  switch(parts[1]){ 
   case '<' : 
    return value <parseInt(parts[2]); 
   case '<=' : 
    return value <=parseInt(parts[2]); 
   case '=' : 
   case '==' : 
    return value ==parseInt(parts[2]); 
   case '>=' : 
    return value >= parseInt(parts[2]); 
   case '>' : 
    return value >parseInt(parts[2]);  
  } 
 } 
})

调用:

<divstyle="width: 500px;">Desrunt mollit anim id estlaborum</div>
<divstyle="width: 200px;">2222222</div>
<divstyle="width:30px;">33333333333333333333333</div>
<divstyle="width: 300px;">4444444444444444</div>
$("div:css(width< 100)").addClass("heighlight");

希望本文所述对大家的jQuery程序设计有所帮助。

Javascript 相关文章推荐
JS控件autocomplete 0.11演示及下载 1月5日已更新
Jan 09 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
Dec 28 Javascript
能说明你的Javascript技术很烂的五个原因分析
Oct 28 Javascript
javascript之querySelector和querySelectorAll使用介绍
Dec 20 Javascript
Jquery UI震动效果实现原理及步骤
Feb 04 Javascript
关于jQuery新的事件绑定机制on()的使用技巧
Apr 26 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
May 12 Javascript
PassWord输入框代码分享
Jun 07 Javascript
JavaScript闭包和范围实例详解
Dec 19 Javascript
JS验证不重复验证码
Feb 10 Javascript
详解如何用模块化的方式写vuejs
Dec 16 Javascript
vue 使用高德地图vue-amap组件过程解析
Sep 07 Javascript
jQuery插件制作之全局函数用法实例
Jun 01 #Javascript
javascript实现设置、获取和删除Cookie的方法
Jun 01 #Javascript
jQuery解析XML文件同时动态增加js文件的方法
Jun 01 #Javascript
JS实现兼容各浏览器解析XML文档数据的方法
Jun 01 #Javascript
javascript判断并获取注册表中可信任站点的方法
Jun 01 #Javascript
js事件监听器用法实例详解
Jun 01 #Javascript
JavaScript中isPrototypeOf函数作用和使用实例
Jun 01 #Javascript
You might like
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
php 定义404页面的实现代码
2012/11/19 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
js 上传图片预览问题
2010/12/06 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
基于jQuery的获取标签名的代码
2012/07/16 Javascript
js匿名函数的调用示例(形式多种多样)
2014/08/20 Javascript
Nodejs极简入门教程(二):定时器
2014/10/25 NodeJs
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
Bootstrap表单控件学习使用
2017/03/07 Javascript
Angular2学习教程之组件中的DOM操作详解
2017/05/28 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
Python类定义和类继承详解
2015/05/08 Python
Python基础篇之初识Python必看攻略
2016/06/23 Python
Python 安装setuptools和pip工具操作方法(必看)
2017/05/22 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
pytorch之Resize()函数具体使用详解
2020/02/27 Python
Keras load_model 导入错误的解决方式
2020/06/09 Python
keras topN显示,自编写代码案例
2020/07/03 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
HTML5实现可缩放时钟代码
2017/08/28 HTML / CSS
canvas小画板之平滑曲线的实现
2020/08/12 HTML / CSS
软件测试工程师笔试题带答案
2015/03/27 面试题
校园招聘策划书
2014/01/09 职场文书
大学四年个人总结
2015/03/03 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python