很详细,原文链接:https://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html#commentform和https://www.cnblogs.com/ghost-xyx/p/5025571.html

附例子:

<div class="a_div">
构造函数内部可以使用this关键字;普通函数内部不建议使用this,因为这时候this指向的是window全局对象,这样无意间就会为window添加了一些全局变量或函数
</div>
<a>点击</a>
<script type="text/javascript">
//构造函数内部可以使用this关键字;普通函数内部不建议使用this,
//因为这时候this指向的是window全局对象,这样无意间就会为window添加了一些全局变量或函数
//自调用匿名函数里面的代码会在第一时间执行,页面准备好过后,上面的代码就将插件准备好了,
//以方便在后面的代码中使用插件
//别人的代码也正常工作,只是最后定义的那个函数没有用分号结尾而以,然后当页面中引入我们的插件时,报错了
//window等系统变量在插件内部就有了一个局部的引用,可以提高访问速度,会有些许性能的提升
;
(function($, window, document, undefined) {
//面向对象
//定义对象Beautifier 的构造函数
var Carousel = function() {};
Carousel.prototype = {
//容器选择器
container: "",
//图片地址数组
datas: null,
autoplaySpeed: null,
autoplay: false,
// 初始化
init: function(options) {
this.container = options.container;
this.datas = options.datas;
this.autoplaySpeed = options.autoplaySpeed;
this.autoplay = options.autoplay;
$(this.container).html("");
this.createCarousel(options);
this.arrowHover();
this.tabImg();
this.setZindex();
//判断是否需要自动播放
if(options.autoplay || this.autoplay == true) {
this.autoPlay(this.autoplaySpeed);
} else {
console.log(0);
return;
}
},
createCarousel: function(options) {
this.createDOM(this.container, options);
},
// 生成DOM
createDOM: function(container, options) {
console.log(options);
var html = "";
html = "<div class='carousel-box clearfix'>" +
"<div class='transverse-box pull-left'>" +
"</div>" +
"<div class='vertical-box pull-right'>" +
"<ul>" +
"</ul>" +
"</div>" +
"<span class='left-arrow'>‹</span>" +
"<span class='right-arrow'>›</span>" +
"</div>";
$(container).html(html);
var imgLength = options.datas.length;
for(var i = 0; i < imgLength; i++) {
$(".transverse-box").append("<div class='img-item'><img src='" + options.datas[i] + "'></div>");
};
$(".vertical-box ul").append("<li><img src='" + options.datas[1] + "'></li>");
$(".vertical-box ul").append("<li><img src='" + options.datas[2] + "'></li>"); },
arrowHover: function() {
$(".carousel-box").hover(function() {
$(".left-arrow,.right-arrow").css("display", "flex");
}, function() {
$(".left-arrow,.right-arrow").css("display", "none");
})
},
// 点击左右箭头触发翻页
tabImg: function() {
var obj = this;
$(".left-arrow").on("click", function() {
obj.changeZindex_add();
})
$(".right-arrow").on("click", function() {
obj.changeZindex_sub();
})
},
// 设置初始zindex
setZindex: function() {
//左侧横向TAB
var imgNum = $(".transverse-box").find(".img-item").length; for(var i = 0; i < imgNum; i++) {
$(".img-item").eq(i).css({
"zIndex": i
});
$(".img-item").eq(i).attr("Zindex", i);
}
},
//前翻
changeZindex_add: function() {
var imgNum = $(".transverse-box").find(".img-item").length;
var lastZindex = $(".transverse-box").find(".img-item").eq(length - 1).attr("zindex");
var firstImgSrc = $(".transverse-box").find(".img-item").eq(0).find("img").attr("src");
var lastImgSrc = $(".transverse-box").find(".img-item").eq(length - 1).find("img").attr("src");
var last2ImgSrc = $(".transverse-box").find(".img-item").eq(length - 2).find("img").attr("src");
$(".transverse-box").find(".img-item").eq(0).remove();
$(".transverse-box").append("<div class='img-item' zindex='" + (parseInt(lastZindex) + 1) + "'><img src='" + firstImgSrc + "'><div>");
$(".vertical-box ul").find("li").eq(0).find("img").attr("src", lastImgSrc);
$(".vertical-box ul").find("li").eq(1).find("img").attr("src", last2ImgSrc);
$(".transverse-box").find(".img-item").eq(length - 1).css({
"zIndex": parseInt(lastZindex) + 1,
"opacity": 0
}, 500);
$(".transverse-box").find(".img-item").eq(length - 1).animate({
"opacity": 1
}, 500); },
// 后翻
changeZindex_sub: function() {
var imgNum = $(".transverse-box").find(".img-item").length;
var lastZindex = $(".transverse-box").find(".img-item").eq(length - 1).attr("zindex");
var firstZindex = $(".transverse-box").find(".img-item").eq(0).attr("zindex");
var lastImgSrc = $(".transverse-box").find(".img-item").eq(length - 1).find("img").attr("src");
var firstImgSrc = $(".transverse-box").find(".img-item").eq(0).find("img").attr("src");
var first2ImgSrc = $(".transverse-box").find(".img-item").eq(1).find("img").attr("src");
$(".transverse-box").find(".img-item").eq(length - 1).remove();
$(".transverse-box").prepend("<div class='img-item' zindex='" + (parseInt(firstZindex) - 1) + "'><img src='" + lastImgSrc + "'><div>");
$(".vertical-box ul").find("li").eq(0).find("img").attr("src", firstImgSrc);
$(".vertical-box ul").find("li").eq(1).find("img").attr("src", first2ImgSrc);
$(".transverse-box").find(".img-item").eq(0).css({
"zIndex": parseInt(firstZindex) - 1
}).siblings().css("opacity", "0");
$(".transverse-box").find(".img-item").eq(length - 1).animate({
"opacity": 1
}); },
// 自动播放
autoPlay: function(x) {
var obj = this;
this.changeZindex_add();
setTimeout(function() {
obj.autoPlay(x)
}, x);
} }
})(jQuery, window, document);
//至于这个undefined,稍微有意思一点,
//为了得到没有被修改的undefined,我们并没有传递这个参数,但却在接收时接收了它,因为实际并没有传,所以‘undefined’那个位置接收到的就是真实的'undefined'了
</script>
<script type="text/javascript">
$(function() { //在dom文档载入完成后执行的函数
var banner = new Carousel();
//图片地址数组。不要少于三张
var imgSrcDate = ["./public/img/a1.png", "./public/img/a2.png", "./public/img/a3.png", "./public/img/a4.png", "./public/img/a5.png", "./public/img/a6.png"];
banner.init({
container: "#banner",
datas: imgSrcDate,
autoplaySpeed: 5000,
autoplay: false
});
});
</script>

关于【jq插件开发】的更多相关文章

  1. 基于jq插件开发及弹窗实例

    基于jq的插件开发是什么鬼,$.fn是什么鬼,我在实际工作中也遇到过这个问题,下面就让我们一起来看一看这些都是什么鬼. 首先我们介绍$.fn. $.fn是指jquery的命名空间,加上fn上的方法及属 ...

  2. JQ插件开发方法

    由于项目原因,不得不写个JQ侧滑插件来满足需求.. 先引用两篇博文,待测试了 再写怎么做.. http://blog.csdn.net/business122/article/details/8278 ...

  3. jq插件开发总结

    http://www.cnblogs.com/silverLee/archive/2009/12/22/1629925.html jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQue ...

  4. 【jQuery】 jQuery基础

    jQuery 之前在JS的文章中提到过,JS虽然功能全面但是仍然比较接近底层,代码写起来很麻烦,而以jQuery为代表的JS库包装了很多功能,可以让代码更加简单.接下来就来简单地记录一下我学习和所知道 ...

  5. 挂号平台首页开发(UI组件部分)

    JQ插件模式开发UI组件 JQ插件开发方法: 1.$.extend() 扩展JQ(比较简单,功能略显不足) $.extend({ sayHello:function(){ console.log(&q ...

  6. jQ效果:jQuery之插件开发短信发送倒计时功能

    实现的主要功能如下: 1.点击按钮的时候,可以进行倒计时,倒计时自定义. 2.当接收短信失败后,倒计时停止,可点击重新发送短信. 3.点击的元素支持一般标签和input标签. html代码: < ...

  7. jquery学习笔记---插件开发模式和结构

    JQuery插件开发http://www.cnblogs.com/damonlan/archive/2012/04/06/2434460.html github教程:https://github.co ...

  8. jQuery插件开发的模式和结构

    jQuery插件开发 一般来说,jQuery插件的开发分为两种:一种是挂在jQuery命名空间下的全局函数,也可称为静态方法:另一种是jQuery对象级别的方法,即挂在jQuery原型下的方法,这样通 ...

  9. jQuery插件开发(转)

    jQuery插件开发 - 其实很简单 [前言]jQuery已经被广泛使用,凭借其简洁的API,对DOM强大的操控性,易扩展性越来越受到web开发人员的喜爱,我在社区也发布了很多的jQuery插件,经常 ...

随机推荐

  1. 使用Atlas进行元数据管理之Type(类型)

    背景:笔者和团队的小伙伴近期在进行数据治理/元数据管理方向的探索, 在接下来的系列文章中, 会陆续与读者们进行分享在此过程中踩过的坑和收获. 元数据管理系列文章: [0] - 使用Atlas进行元数据 ...

  2. Flutter 即学即用系列博客——03 在旧有项目引入 Flutter

    前言 其实如果打算在实际项目中引入 Flutter,完全将旧有项目改造成纯 Flutter 项目的可能性比较小,更多的是在旧有项目引入 Flutter. 因此本篇我们就说一说如何在旧有项目引入 Flu ...

  3. Asp.Net MVC Https设置

    1.   IIS设置 1.1 创建SSL证书 点击左侧菜单栏顶部,点击“功能视图”里的“服务器证书”: 点击“创建自动签名证书”创建自动签名证书: 1.2 设置SSL证书 点开网站,在“功能视图”里点 ...

  4. SqlSugar ORM 入门篇2 【查询】 让我们实现零SQL

    SqlSugar在查询的功能是非常强大的,多表查询.分页查询 . 一对一查询.二级缓存.一对多查.WhenCase等复杂函数.Mapper功能.和拉姆达自定义扩展等,用好了是可以做到真正零SQL的一款 ...

  5. 服务器端Session和客户端Session

    客户端Session和服务器端Session 当用户首次与web服务器建立连接的时候,服务器会给用户分发一个SessionID作为标识.SessionID是一个由24个字符组成的随机字符串.用户每次提 ...

  6. SAP MM 公司间STO里交货单PGI之后自动触发内向交货单功能的实现

    SAP MM 公司间STO里交货单PGI之后自动触发内向交货单功能的实现 笔者所在的项目上的公司间STO的流程里,发货公司在做PGI之后系统自动触发收货公司的内向交货单.这个功能是通过交货单的Outp ...

  7. Skyline基本操作模式封装

    skyline基本操作模式 项目中基于skyline的浏览器插件进行二次开发,基本的业务操作模式如下: 工具栏:点击工具栏某个功能,开启操作模式. onFrame:鼠标移动预选对象,在能够拾取或者选定 ...

  8. 一起学Android之ListView

    本文以一个小例子,简述Android开发中ListView的相关应用,仅供学习分享使用. 概述 ListView是一个显示可滚动项目列表的视图组(view group),列表项通过适配器(Adapte ...

  9. MongoDB- 简单操作命令

    MongoDB是基于集合操作的数据库 1.进入与退出 mongo / exit 2.库操作 显示所有库: show dbs; 查看当前所在库: db; 切换&使用某个库: use db_nam ...

  10. 七 Struts2 文件上传和下载

    配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC &qu ...