关于【jq插件开发】

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

附例子:

<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>        
时间: 2024-08-03 09:29:28

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

JQ插件开发详解

jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级别的插件开发,即给jQuery对象添加方法.下面就两种函数的开发做详细的说明. 1.类级别的插件开发 类级别的插件开发最直接的理解就是给jQuery类添加类方法,可以理解为添加静态方法.典型的例子就是$.AJAX()这个函数,将函数定义于jQuery的命名空间中.关于类级别的插件开发可以采用如下几种

jQ插件开发规范(转)

当我们画出了UI之后就可以正式编写jQuery插件代码了,不过在着之前我们还需要对jQuery插件开发的一些规范性有一些了解. 1. 使用闭包:(function($) {  // Code goes here})(jQuery); 这是来自jQuery官方的插件开发规范要求,使用这种编写方式有什么好处呢? a) 避免全局依赖. b) 避免第三方破坏. c) 兼容jQuery操作符'$'和'jQuery ' 我们知道这段代码在被解析时会形同如下代码:var jq = function($) { 

JQ插件开发

在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了. 使用相同的设计模式和架构也让修复bug或者二次开发更容易.一套经过验证的架构可以保证我的插件不出大的问题,不论插件简单还是复杂. 我在这里分享10条我总结的经验. 1. 把你的代码全部放在闭包里面 这是我用的最多的一条.但是有时候在闭包外面的方法会不能调用.不过你的插件的代码只为你自己的插件服务,所以不存在

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

JQ插件模式开发UI组件 JQ插件开发方法: 1.$.extend() 扩展JQ(比较简单,功能略显不足) $.extend({ sayHello:function(){ console.log("hello~"); } }); $.sayHello(); 2.$.fn  向JQ添加新方法(这次选择这种方法) $.fn.blue=function(){ this.css("background","blue"); } $("div&qu

jQuery 插件开发

jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发的,有了模式,我们就能更好地组织我们的代码,并且从这些前人总结出来的模式中学到很多好的实践. jQuery插件开发方式主要有三种: 通过$.extend()来扩展jQuery 通过$.fn 向jQuery添加新的方法 通过$.widget()应用jQuery UI的部件工厂方式创建 通常我们使用第二种方法来进行简单插件开发,说简单是相对于第三种方式.第三种方式是用来开发更高级jQuery部件的,该模式开发出来的部件带有很多jQ

jQuery插件开发前准备

[前言] 关于jQuery的插件,网上一搜一大把,一开始在项目中使用别人写的插件的时候,真是佩服的五体投地,调用的时候简简单单的几句代码,就能实现很复杂的功能.那么如何开发自己的插件呢?其实并不难,从简单的开始,一步一步网上添加功能,最后咋们也能写出功能强大的插件. [jQuery插件开发模式] jQuery插件开发模式有三种: (1)通过$.extend()来扩展jQuery 多用于拓展工具方法,比如给一个数组封装一个方法,功能是将其中的重复元素删除:$.removeSameItem([1,1

jq插件的编写方法(自定义jq插件)---转

本JQ插件例子是在你网站的文章结尾处添加你的版权. JQ插件标准的封装代码如下,首先需要闭包: 1 <script type="text/javascript"> 2 (function ($) { 3 //这里放入插件代码 4 })(jQuery); 5 </script> 这是jQuery官方的插件开发规范,这样写是作用是:1. 避免全局依赖.2. 避免第三方破坏.3. 兼容jQuery操作符'$'和'jQuery' 接着给插件加入主体: 1 <scr

jQuery插件开发 总结

一般来说,jQuery插件的开发分为两种:一种是挂在jQuery命名空间下的全局函数,也可称为静态方法:另一种是jQuery对象级别的方法,即挂在jQuery原型下的方法,这样通过选择器获取的jQuery对象实例也能共享该方法. 一.在讲解jQuery插件基本结构和模式前,先介绍下两个重要的方法: 1.$.extend(target, [object1], [objectN]) 该方法主要用于合并两个或更多对象的内容(属性)到第一个对象,并返回合并后的第一对象.如果该方法只有一个参数target

写一个简单的JQ插件(例子)

虽然现在 vue angular react 当道啊但是那 JQ还是有一席之地很多很多的小单位啊.其实还会用到 我也放一个例子吧虽然我也不是很肯定有没有人写的比我更好啊但是我相信 我这个还是蛮实用的 话不多说 丢代码 JQ插件标准的封装代码如下,首先需要闭包: <scripttype="text/javascript"> (function ($) {  //这里放入插件代码 })(jQuery); </script> 这是jQuery官方的插件开发规范,这样写