很详细,原文链接: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. 使用IO流写文件的一些骚操作

    序言 当需要对文件进行操作时,使用IO流是不能避免的操作:比如业务中需要存储一些请求的响应结果中的一些内容.当所需处理的文件过大时,如果频繁的关闭文件流,会造成很大的开销,何时关闭?往往会造成比较大的 ...

  2. jQuery(三)、属性、CSS

    jQuery设置了很多为标签进行属性的操作,比如添加.删除. 一 .属性 1 attr(name | properties | [key, value | fn]) 设置或返回被选择的属性值. 参数: ...

  3. Java笔记(day9~day10)

    继承: 好处:1.提高代码复用性:   2.让类之间产生关系,给多态提供了前提: 父类.子类 Java中支持单继承,不直接支持多继承,但对C++的多继承进行了改良 单继承:一个子类只能有一个直接复类 ...

  4. headfirst设计模式(6)—单例模式

    前言 这一章的课题看起来就很和蔼可亲了,比起前面绕的我不要不要的工厂模式,那感觉真是太好了,但是正是因为简单,那么问题就来了,我怎么才能把这个东西叙述清楚?怎么样才能老少咸宜呢? 如何能够在把这个东西 ...

  5. webpack4.x笔记-配置基本的前端开发环境(一)

    webpack的基本使用 webpack 本质上是一个打包工具,它会根据代码的内容解析模块依赖,帮助我们把多个模块的代码打包.借用 webpack 官网的图片: 虽然webpack4.x的版本可以零配 ...

  6. 生鲜配送管理系统_升鲜宝V2.0 供应商协同系统设计思想及设计效果展现(一)

    生鲜配送管理系统[升鲜宝]V2.0 供应商协同系统小程序设计思想及操作说明(一)     生鲜供应链企业,最重要的二个方面,其中一个是客户服务(销售订单)    另外一个就是供应商的管控,只有做好了这 ...

  7. android - TextView单行显示...或者文字左右滚动(走马灯效果)

    条件 TextView单行显示,文字左右滚动(走马灯效果)实现条件: 实现单行设置固定宽度或者设置权重都行 代码 TextView滚动必须写下面几个属性 android:singleLine=&quo ...

  8. CMMI 2.0术语变化

    过程域 vs. 实践域 “过程域”(Process Areas,PAs)在CMMI 2.0中变成了“实践域(Practice Areas,PAs)”.这样的改变,强调了CMMI 2.0是最佳实践的集合 ...

  9. SQL Server 增加链接服务器

    exec sp_addlinkedserver '名称' , '' , 'SQLOLEDB' , '10.102.29.xxx' exec sp_addlinkedsrvlogin '名称' , 'f ...

  10. 关于Android Studio 代理

    1.需要代理 首次使用Android Studio需 推荐代理 大连东软信息学院镜像服务器地址: - http://mirrors.neusoft.edu.cn 端口:80 2.不需要代理 检查更新, ...