代码改变世界

jQuery幻灯片插件

2011-12-11 16:38  二军  阅读(1045)  评论(0编辑  收藏  举报

学了几个星期的jq了,,这几天写了个幻灯片插件。。有兴趣的朋友可以看看。。。http://www.shenmimi.com/blog/?p=19

希望大家多多支持我这个菜鸟呀!有什么意见或BUG请给我留言!

避免广告嫌疑,代码如下:欢迎讨论!希望多提优化建议!

(function($) {
        $.fn.extend({
                "huandeng": function(options) {
                        options = $.extend({ //默认参数
                                sudu: 3000,
                                //图片切换速度
                                yangshi: 1,
                                //样式
                                qsudu: 1000,
                                //图片显示速度
                                hsudu: 1000,
                                //图片消失速度
                                nav: 1,
                                //导航显示方式
                                dingshi: true,
                                //是否自动播放
                                tit: true,
                                //是否显示标题
                                hover: true //悬停是否暂停
                        },
                        options)
                        var $tu = this;
                        var len = $tu.find("a").length; //取得图片总数
                        var adTimer; //定时器
                        var $sudu = options.sudu; //引用参数速度
                        var $yangshi = options.yangshi; //引用参数样式
                        var $qsudu = options.qsudu; //引用参数图片显示速度
                        var $hsudu = options.hsudu; //引用参数图片消失速度
                        var $tit = options.tit; //标题
                        var $dingshi = options.dingshi; //是否自动播放
                        var $nav = options.nav;
                        var index = 0; //当前索引
                        var num = 0;
                        $dingshi == true ? $($tu).hover(function() {
                                options.hover == true ? clearInterval(adTimer) : {}; //停止计时
                        },
                        function() {
                                adTimer = setInterval(function() { //设置计时器
                                        if ($tu.find("a").is(":animated")) {
                                                return false;
                                        }
                                        index++; //索引累加
                                        index == 0 ? num = len - 1: num = index - 1;
                                        if (index == len) {
                                                index = 0;
                                        } //如果索引等于总索引,归0
                                        showImg(index); //调用函数处理索引
                                },
                                $sudu) //秒间隔
                        }).trigger("mouseleave") //立即调用事件
                        : {};
                        if ($tit == true) {
                                $tu.append("<h1></h1>"); //插入标题
                                $tu.find("h1").text($tu.find("img").first().attr("alt"));
                        }
                        if ($nav == 1) {
                                $tu.append("<ol></ol>"); //创建并插入ol节点
                                if ($tu.find("ol")) {
                                        for (var i = 1; i < len + 1; i++) {
                                                $($tu.find("ol")).append("<li>" + i + "</li>"); //循环插入li节点
                                        }
                                }
                                $($tu.find("ol li")).first().addClass("bg"); //给第一个数字加类
                                $($tu.find("ol li")).click(function() { //数字单击事件
                                        if ($tu.find("a").is(":animated")) {
                                                return false;
                                        }
                                        num = index; //上一次事件   
                                        index = $(this).index(); //索引等于当前索引
                                        showImg(index); //调用函数处理
                                })
                        }
                        if ($nav == 2) {
                                $tu.before("<img src='img/prev.png' alt='' id='prve'>").after("<img src='img/next.png' alt='' id='next'>");
                                //index=0;
                                $("#next").click(function() {
                                        if ($tu.find("a").is(":animated")) {
                                                return false;
                                        }
                                        index++; //索引累加
                                        index == 0 ? num = len - 1: num = index - 1;
                                        if (index == len) {
                                                index = 0;
                                        } //如果索引等于总索引,归0
                                        showImg(index); //调用函数处理索引
                                })
                                $("#prve").click(function() {
                                        if ($tu.find("a").is(":animated")) {
                                                return false;
                                        }
                                        index--; //索引累-
                                        if (index == - 1) {
                                                index = len - 1;
                                        } //如果索引等于总索引,归0
                                        index == len - 1 ? num = 0: num = index + 1;
                                        showImg(index); //调用函数处理索引
                                })
                        }
                        if ($nav == 3) {
                                $tu.append("<ol></ol>"); //创建并插入ol节点
                                if ($tu.find("ol")) {
                                        for (var i = 1; i < len + 1; i++) {
                                                var $xiaotu = $tu.find("img:eq(" + i + ")").attr("src");
                                                $($tu.find("ol")).append("<li><img src='" + $xiaotu + "' width='50' height='50'></li>"); //循环插入li节点
                                        }
                                }
                                $($tu.find("ol li")).first().addClass("bg"); //给第一个数字加类
                                $($tu.find("ol li")).click(function() { //数字单击事件
                                        if ($tu.find("a").is(":animated")) {
                                                return false;
                                        }
                                        num = index; //上一次事件   
                                        index = $(this).index(); //索引等于当前索引
                                        showImg(index); //调用函数处理
                                })
                        }
                        function showImg(index) { //处理图像函数
                                if ($tu.find("a").is(":animated")) {
                                        return false;
                                }
                                //$(".cs").text("上一个"+num+"+当前"+index)
                                if (num == index) {
                                        return false;
                                }
                                var $dh = $tu.find("a").eq(index); //当前动画
                                var $qdh = $tu.find("a").eq(num); //前动画
                                switch ($yangshi) {
                                case 0:
                                        $tit == true ? tit($dh) : {};
                                        $dh.show(num > index ? 0: $qsudu, function() {
                                                $qdh.hide($hsudu);
                                        })
                                        break;
                                case 1:
                                        $tit == true ? tit($dh) : {};
                                        $dh.fadeIn($qsudu) //当前元素索引显示
                                        .siblings("a").fadeOut($hsudu); //其他元素隐藏
                                        break;
                                case 2:
                                        $tit == true ? tit($dh) : {};
                                        $hsudu > $qsudu ? $qsudu = $hsudu: {};
                                        var $width = $tu.width();
                                        $dh.css({
                                                display: "inline",
                                                left: num > index ? $width + "px": "-" + $width + "px"
                                        });
                                        $qdh.animate({
                                                left: num > index ? "-" + $width + "px": $width + "px"
                                        },
                                        $qsudu, function() {
                                                $(this).css({
                                                        display: "none"
                                                })
                                        });
                                        $dh.animate({
                                                left: "0px"
                                        },
                                        $hsudu);
                                        break;
                                case 3:
                                        $tit == true ? tit($dh) : {};
                                        $hsudu > $qsudu ? $qsudu = $hsudu: {};
                                        var $height = $tu.height();
                                        $dh.css({
                                                display: "inline",
                                                top: num > index ? $height + "px": "-" + $height + "px"
                                        });
                                        $qdh.animate({
                                                top: num > index ? "-" + $height + "px": $height + "px"
                                        },
                                        $qsudu, function() {
                                                $(this).css({
                                                        display: "none"
                                                })
                                        });
                                        $dh.animate({
                                                top: "0px"
                                        },
                                        $hsudu);
                                        break;
                                }

                                $($tu.find("ol li")).eq(index).click(function() {
                                        return false;
                                }).addClass("bg") //当前数字加类
                                .siblings("li").removeClass("bg"); //其他数字去掉
                        }
                        function tit(tit) {
                                $tu.find("h1").text(tit.find("img").attr("alt"));
                        }
                }
        })
})(jQuery);