关于jQuery写插件及其演示
关于写jQuery插件是非常有必要的。这是前端学习其中必须经过的一个过程
对于初次写插件先想清楚原理
(function($){
$.fn.yourName = function(options){
//各种属性、參数
}
var options = $.extend(defaults, options);
this.each(function(){
//插件实现代码
});
};
})(jQuery);
这是一个基础的模板
当中的var options = $.extend(defaults, options);
1.$.extend()方法
$.extend()方法在JQuery中有两个使用方法。第一次是扩展方法。
第二个方法是
jQuery.extend([deep], target, object1, [objectN])
返回值:Object
把2个对象合并得到新的target,deep是可选的(递归合并)
合并 settings 和 options,改动并返回 settings。
jQuery 代码:
var settings = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
jQuery.extend(settings, options);
结果:
settings == { validate: true, limit: 5, name: "bar" }
描写叙述:
合并 defaults 和 options, 不改动 defaults。
jQuery 代码:
var empty = {};
var defaults = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar" };
var settings = jQuery.extend(empty, defaults, options);
结果:
settings == { validate: true, limit: 5, name: "bar" }
empty == { validate: true, limit: 5, name: "bar" }
2中扩展:
第一种。看代码
$(function(){ |
jQuery.extend({ |
modalshow: function (options) { |
var defaults = { |
triggerID: 'LoginShow', |
callback: function () { } |
}<br> //这里是$.extend的另外一种使用方法<br> var opts = $.extend({},defaults, options); |
if ($("#" + opts.triggerID)[0] == null) |
var $triggerBTN = $('<input type="button" value="LoginShow" id=' + opts.triggerID'/>'); |
$triggerBTN.bind("click", function () |
alert(opts.triggerID); |
}); |
$("body").append($triggerBTN); |
} else { |
$("#" + opts.triggerID).bind("click", function () |
alert(opts.triggerID); |
}) |
} |
} |
}); |
$.modalshow();//这里是调用的地方,id为'loginshow'的button能够先不再HTML中加入能够自己主动生成 |
}) |
另外一种扩展
$(function(){ |
jQuery.fn.extend({ |
modalshow: function (options) { |
var defaults = { |
//这里的this是JQuery对象 |
triggerID: this.attr("id"), |
callback: function () { } |
}<br> //这里是$.extend的另外一种使用方法<br> var opts = $.extend(defaults, options); |
$("#" + opts.triggerID).bind("click", function () |
alert(opts.triggerID); |
}) |
} |
}); |
$("#loginShow").modalshow();//这里是调用的地方。这里须要先在HTML中增加元素 |
}) |
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题</title>
<style type="text/css">
*{
padding:0px;
margin: 0px;
}
.clear{
clear: both;
}
.menu li{
float: left;
width: 100px;
height: 30px;
line-height: 30px;
border:1px solid #ccc;
border-bottom: 5px solid #ccc;;
}
.main{
margin-top: 0px;
width: 406px;
height: 206px;
overflow: hidden;
}
.main div{
width: 403px;
height: 200px;
line-height: 200px;
text-align: center;
border:1px solid #000;
}
.menu .on{
border-bottom: 6px solid red;
}
</style>
<script type="text/javascript" src="Jquery.js"></script>
<script type="text/javascript" src="Tab.js"></script>
</head>
<body>
<div class="tabs">
<ul class="menu">
<li class="on">111</li>
<li>222</li>
<li>333</li>
<div class="clear"></div>
</ul>
<div class="main">
<div class="tab">AAA</div>
<div class="tab">BBB</div>
<div class="tab">CCC</div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function() {
$('.tabs').myTab({
operate:'mouseover',
auto:false,
time:1000,
delay:true,
delaytime:0
})
//利用闭包的原理,对于myTab函数中的一些元素进行初始化
});
</script>
</body>
/***
* 标题:选项卡插件
* 编写时间:2015年7月14号
* 作者:Helios
* 邮箱:67487158@qq.com
***/
;(function($){
$.fn.myTab=function(options){
return this.each(function(){
var defaults={
operate: 'click',
auto: true,
time: 4000,
delay: true,
delayTime: 500
}
var opts = $.extend(defaults, options), //这里面两个參数的顺序不能改变。由于后面的那个时不会被覆盖掉的
//$.extend(defaults, options);表示的是假设options中的參数总是有值的话。那么options中的值将会取代defaults中的值
//假设options參数传入的值为空,那么就能够使用默认设置的值。
self = $(this), //获取当前的tabs
items = self.children('ul.menu').children('li'), //获取上面的是那三个
tabBox = self.children('div.main'), //获取到了main这个节点
tabBoxItems = tabBox.children('div'), // 获取mian以下的div
timer; //设置了一个定时器
var tabHandle = function(index){ //这是进行函数对选中的li和相应的div进行变换
items.siblings('li').removeClass('on').end().eq(index).addClass('on');
tabBoxItems.siblings().hide().end().eq(index).show();
//end()函数的使用方法,就是结束对当前节点的操作继续对曾经的那个节点继续操作
},
delay = function(elem){ //这个延时函数
opts.delay ?
setTimeout(function(){tabHandle(elem);},opts.delaytime) :tabHandle(elem);
},
start = function(){ //開始函数 假设參数设置了自己主动 就运行以下的第二行代码,假设没有设置的话就开启了定时器
if(!opts.auto) return ;
setInterval(autoRun,opts.time);
},
autoRun =function(){ //自己主动播放函数
var on = self.find('li.on'), //获取当前on所在的li
firstItem = items.eq(0),//设置默认第一个li
len = items.length, //
index = on.index()+1,
item = index ===len ? firstItem : on.next('li'), //当前的索引假设等于li的总长度就返回默认的第一个,假设不是就是下一个
i = index ===len ?
0 : index; // 假设播放到了最后一个就跳转到第一个
on.removeClass('on'); //移除当前li上面的样式
item.addClass('on'); //把该选中的添加样式
tabBoxItems.siblings().hide().end().eq(index).show(); // 更换div中的内容 和tabHandle 运行一样的操作
}
//bind() 方法为被选元素加入一个或多个事件处理程序,并规定事件发生时执行的函数。
//第一个參数传递事件,第二个參数还改事件相应的函数
items.bind(opts.operate, function () {
var index = items.index($(this));
delay(index)
});
if (opts.auto) { //假设设置了auto的话推断成功
start();
self.hover(function () {
clearInterval(timer);
timer = undefined;
}, function () {
start();
})
}
})
}
})(jQuery);
关于jQuery写插件及其演示的更多相关文章
- 为jQuery写插件
很多场合,我们都会调用jQuery的插件去完成某个功能,比如slider. 如下图,做一个div,通过“$( "#slider" ).slider();”的方式直接将div变成sl ...
- 实时更新数据的jQuery图表插件DEMO演示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- jQuery导航插件One-Page-Nav演示-显示命名锚记
jQuery导航插件One-Page-Nav演示-显示命名锚记 简介 使用 选项 示例 推荐 简介 电商网站的分类比较明确,比如1楼是手机通讯产品,2楼是家用电器,3楼是服装鞋包等等,旁边还会有一个固 ...
- jquery写插件
http://www.cnblogs.com/ajianbeyourself/p/5815689.html
- 如何使用jQuery写一个jQuery插件
jQuery插件其实是前端框架的思维,构成一个框架,个人认为必须满足以下几个基础条件:1. 可重用,2. 兼容性,3. 维护方便,虽说现在有很多比较成熟的前端框架,但是也有部分存在配置麻烦,学习成本大 ...
- 自己动手写插件底层篇—基于jquery移动插件实现
序言 本章作为自己动手写插件的第一篇文章,会尽可能的详细描述一些实现的方式和预备知识的讲解,随着知识点积累的一点点深入,可能到了后期讲解也会有所跳跃.所以,希望知识点不是很扎实的读者或者是初学者,不要 ...
- jquery.fullPage.js全屏滚动插件教程演示
css部分(此处需要导入jquery.fullPage.css) <style> .section { text-align: center; font: 50px "Micro ...
- 分享7款非常实用的jQuery/CSS3插件演示和源码
上次我们分享了15款效果很酷的最新jQuery/CSS3特效,非常不错,今天要分享7个非常实用的jQuery/CSS3插件演示和源码,一起来看看. 1.jQuery ajax点击地图显示商家网点分布 ...
- 用jQuery写了一个模态框插件
用jQuery写了一个模态框插件 大家觉得下面的框框好看么, 水印可以去掉(这个任务交给你们了(- o -)~zZ); "info"框 $("div").con ...
随机推荐
- leetcode_951. Flip Equivalent Binary Trees_二叉树遍历
https://leetcode.com/problems/flip-equivalent-binary-trees/ 判断两棵二叉树是否等价:若两棵二叉树可以通过任意次的交换任意节点的左右子树变为相 ...
- java线程学习2
sleep 变为阻塞态 但不释放锁 休眠指定毫秒时间 yield 变为就绪态 可能立即被执行 也可能不立即被执行 join 插队 暂停当前执行的线程 让调用join的线程先执行 线 ...
- print keys %map_function 输出 散列的值: OK_funcsplit_funcpackage_VAR
my %map_function = ( 88 "OK_func" => "open_statement", 89 &qu ...
- C# Word 类库
C# Word 类库 2009-08-06 22:10 14292人阅读 评论(11) 收藏 举报 c#objectstring文档microsoftexcel using System;using ...
- [实现] 利用 Seq2Seq 预测句子后续字词 (Pytorch)
最近有个任务:利用 RNN 进行句子补全,即给定一个不完整的句子,预测其后续的字词.本文使用了 Seq2Seq 模型,输入为5个中文字词,输出为一个中文字词. 目录 关于RNN 语料预处理 搭建数据集 ...
- 基于短语的统计机器翻(PBMT) 开源工具 :Moses
如何运行Moses 1. Moses的历史 Moses是Pharaoh的升级版本,增加了许多功能.它是一个基于短语的统计机器翻译系统,整个系统用C++语言写成,从训练到解码完全开放源代码,可以运行在L ...
- 如何判断页面是在移动端还是PC端打开的呢
1. window.location.href = /Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent) ? " ...
- sizeof 感知重载,模板具现, 转换规则
问题:如何侦知任意型别 T 是否可以自动转换为型别 U? 方案:侦测转换能力的想法:合并运用 sizeof 和重载函数. 1 依赖 sizeof,sizeof 有着惊人的能力,你可以把 sizeof ...
- CF147B Smile House
题目大意:给定一个有向图,其中边有边权.求点数最少的正环的点数. 题解:建立矩阵,处理其二进制上每一位的状态.时间O(n^3*log(n)). 代码: #include<cstdio> # ...
- 使用maven的mybatis-generator代码生成器插件生成实体类、mapper配置文件和mapper接口(使用idea)
接着之前创建的ssmMaven项目 一: 在pom文件中加入mybatis-generator插件 <plugins> <plugin> <groupId>org. ...