超酷的jQuery百叶窗图片滑块实现教程

原文:超酷的jQuery百叶窗图片滑块实现教程

今天我们要来分享一款基于jQuery的百叶窗焦点图插件,也可以说是图片滑块插件。这种jQuery焦点图插件的应用非常广泛,在早些年前,我们需要用flash来完成这种百叶窗的效果。如今我们可以用jQuery来实现这个动画效果。这款jQuery百叶窗焦点图不仅可以横向切换,也可以垂直切换,效果都非常不错。

你也可以在这里查看在线演示

下面我们来简单解说一下实现这款jQuery百叶窗焦点图的过程和代码,代码主要由HTML、CSS以及jQuery组成,实现比较简单。

HTML代码:

<div id="slider">
<img src="images/1.jpg" alt="网页素材大全1" title="网页素材大全" />
<img src="images/2.jpg" alt="网页素材大全2" title="网页素材大全" />
<img src="images/3.jpg" alt="网页素材大全3" title="网页素材大全" />
</div>

HTML代码非常简单,一个div中列出了3张图片,这3张图片到时候我们可以制作成百叶窗的切换效果。

CSS代码:

#slider {
    position: relative;
    width: 600px;
    overflow: hidden;
    margin: 10px auto 30px auto;
}

#slider li {
    position: absolute;
    top: 0;
    left: 0;
}

.caption {
    opacity: 0.8;
    background: #000;
    height: 33px;
    padding: 5px 0 0 0;
    color: #fff;
    text-align: center;
    font: 25px/1 '微软雅黑';
    z-index: 200;
}

.prev-link, .next-link {
    display: block;
    width: 24px;
    height: 24px;
    background-repeat: no-repeat;
    background-position: left top;
    position: absolute;
    bottom: 10px;
    z-index: 300;
}

.prev-link {
    left: 10px;
    background-image: url(prev.png );
}

.next-link {
    left: 40px;
    background-image: url(next.png );
}

.circle {
    display: block;
    width: 16px;
    height: 16px;
    background: url(circle-empty.png ) no-repeat left top;
    position: absolute;
    bottom: 10px;
    z-index: 300;
}

.circle-current {
    background-image: url(circle-full.png );
}

CSS代码也非常简单,设置背景的同时也设置了左右按钮箭头和切换图片的小圆点,只是利用了几张背景图片,并没有用复杂的CSS代码。

最后的jQuery代码才是关键,这才是实现百叶窗效果的核心代码。

jQuery代码:

(function(a) { (function() {
        var b = false;
        var c = (/xyz/.test(function() {
            xyz
        })) ? (/\b_super\b/) : (/.*/);
        this.Class = function() {};
        Class.extend = function(h) {
            var g = this.prototype;
            b = true;
            var f = new this();
            b = false;
            for (var e in h) {
                if (typeof h[e] == "function" && typeof g[e] == "function" && c.test(h[e])) {
                    f[e] = (function(i, j) {
                        return function() {
                            var l = this._super;
                            this._super = g[i];
                            var k = j.apply(this, arguments);
                            this._super = l;
                            return k
                        }
                    })(e, h[e])
                } else {
                    f[e] = h[e]
                }
            }
            function d() {
                if (!b && this.init) {
                    this.init.apply(this, arguments)
                }
            }
            d.prototype = f;
            d.constructor = d;
            d.extend = arguments.callee;
            return d
        }
    })();
    a.fn.lateralSlider = function(b) {
        var d = {
            displayDuration: 2000,
            animateDuration: 1500,
            numColumns: 10,
            transitions: "fade,slideUp,slideDown,slideLeft,slideRight,slideUpAndDown,slideLeftAndRight,fadeAndSlideUp,fadeAndSlideDown,fadeAndSlideLeft,fadeAndSlideRight,fadeSlideUpAndRight,fadeSlideDownAndLeft",
            random: false,
            hidePrevAndNextArrows: false,
            hideSlideChooser: false,
            captionOpacity: 0.8
        };
        var c = a.extend({},
        d, b);
        this.each(function() {
            var j = a(this);
            var t = Class.extend({
                $imgs: null,
                size: null,
                displayImg: null,
                nextImg: null,
                numDivs: null,
                divWidth: null,
                baseCSS: null,
                $divs: null,
                transitions: [],
                transition: null,
                transitionCount: null,
                interval: null,
                width: null,
                init: function() {
                    this.$imgs = a("img", j);
                    this.size = this.$imgs.size();
                    this.$imgs.hide();
                    this.nextImg = 0;
                    this.width = j.width();
                    this.numDivs = c.numColumns;
                    this.divWidth = this.width / this.numDivs;
                    this.baseCSS = {
                        width: this.divWidth,
                        position: "absolute",
                        top: 0,
                        backgroundRepeat: "no-repeat"
                    };
                    this.createDivs();
                    this.$divs = a("div", j);
                    this.transitionCount = -1
                },
                createDivs: function() {
                    for (var A = 0; A < this.numDivs; A++) {
                        var B = a("<div></div>");
                        B.css(this.baseCSS);
                        B.css("left", this.divWidth * A);
                        B.appendTo(j)
                    }
                }
            });
            var y = new t();
            var g = Class.extend({
                baseDuration: null,
                originalOffset: null,
                offset: null,
                init: function() {
                    this.baseDuration = c.animateDuration / 8;
                    this.originalOffset = 7 * c.animateDuration / (8 * y.numDivs);
                    this.offset = 7 * c.animateDuration / (8 * y.numDivs)
                },
                duration: function() {
                    return this.baseDuration + this.offset
                },
                increment: function() {
                    this.offset += this.originalOffset
                },
                reset: function() {
                    this.offset = this.originalOffset
                },
                getCSS: function(A) {
                    return {}
                },
                eachDiv: function() {
                    return {}
                },
                applyTransition: function() {
                    y.$divs.each(this.eachDiv);
                    this.reset()
                }
            });
            var v = g.extend({
                applyTransition: function() {
                    var A = this;
                    y.$divs.each(function() {
                        var B = A.eachDiv;
                        if (typeof(A.eachDiv) == "function") {
                            B = B()
                        }
                        a(this).animate(B, A.duration());
                        A.increment()
                    });
                    this.reset()
                }
            });
            var m = v.extend({
                getCSSIndex: null,
                eachDivIndex: null,
                getCSSGroup: null,
                eachDivGroup: null,
                init: function() {
                    this._super();
                    this.getCSSGroup = new Array();
                    this.eachDivGroup = new Array();
                    this.getCSSIndex = 0;
                    this.eachDivIndex = 0
                },
                getCSS: function(B) {
                    var A = this.getCSSGroup[this.getCSSIndex];
                    this.getCSSIndex = (this.getCSSIndex + 1) % this.getCSSGroup.length;
                    return A(B)
                },
                addTransition: function(A) {
                    this.getCSSGroup.push(A.getCSS);
                    this.eachDivGroup.push(A.eachDiv)
                },
                applyTransition: function() {
                    var A = this;
                    y.$divs.each(function() {
                        var B = A.eachDivGroup[A.eachDivIndex];
                        if (typeof(B) == "function") {
                            B = B()
                        }
                        a(this).animate(B, A.duration());
                        A.eachDivIndex = (A.eachDivIndex + 1) % A.eachDivGroup.length;
                        A.increment()
                    });
                    this.reset()
                }
            });
            var u = v.extend({
                getCSS: function(A) {
                    return {
                        opacity: 0
                    }
                },
                eachDiv: {
                    opacity: 1
                }
            });
            var f = v.extend({
                getCSS: function(A) {
                    return {
                        top: y.$imgs.eq(y.nextImg).height()
                    }
                },
                eachDiv: {
                    top: 0
                }
            });
            var h = v.extend({
                getCSS: function(A) {
                    return {
                        height: 0
                    }
                },
                eachDiv: function() {
                    return {
                        height: y.$imgs.eq(y.nextImg).height()
                    }
                }
            });
            var r = v.extend({
                getCSS: function(B) {
                    var A = B.css("left");
                    A = parseInt(A.substring(0, A.length - 2), 10);
                    return {
                        left: A + y.divWidth,
                        width: 0
                    }
                },
                eachDiv: {
                    left: "-=" + y.divWidth,
                    width: y.divWidth
                }
            });
            var q = v.extend({
                getCSS: function(A) {
                    return {
                        width: 0
                    }
                },
                eachDiv: {
                    width: y.divWidth
                }
            });
            var o = m.extend({
                addTransitions: function(A, B) {
                    this.addTransition(A);
                    this.addTransition(B)
                }
            });
            var w = m.extend({
                addTransitions: function(B, A) {
                    this.addTransition(B);
                    this.addTransition(A)
                }
            });
            var k = m.extend({
                addTransitions: function(A, B) {
                    this.addTransition(A);
                    this.addTransition(B)
                }
            });
            var n = m.extend({
                addTransitions: function(A, B) {
                    this.addTransition(A);
                    this.addTransition(B)
                }
            });
            var p = m.extend({
                addTransitions: function(A, B) {
                    this.addTransition(A);
                    this.addTransition(B)
                }
            });
            var e = m.extend({
                addTransitions: function(A, B) {
                    this.addTransition(A);
                    this.addTransition(B)
                }
            });
            var x = m.extend({
                addTransitions: function(A, C, B) {
                    this.addTransition(A);
                    this.addTransition(C);
                    this.addTransition(B)
                }
            });
            var s = m.extend({
                addTransitions: function(C, A, B) {
                    this.addTransition(C);
                    this.addTransition(A);
                    this.addTransition(B)
                }
            });
            var z = {
                fade: new u(),
                slideUp: new f(),
                slideDown: new h(),
                slideLeft: new r(),
                slideRight: new q(),
                slideUpAndDown: new o(),
                slideLeftAndRight: new w(),
                fadeAndSlideUp: new k(),
                fadeAndSlideDown: new n(),
                fadeAndSlideLeft: new p(),
                fadeAndSlideRight: new e(),
                fadeSlideUpAndRight: new x(),
                fadeSlideDownAndLeft: new s()
            };
            z.slideUpAndDown.addTransitions(z.slideUp, z.slideDown);
            z.slideLeftAndRight.addTransitions(z.slideLeft, z.slideRight);
            z.fadeAndSlideUp.addTransitions(z.slideUp, z.fade);
            z.fadeAndSlideDown.addTransitions(z.fade, z.slideDown);
            z.fadeAndSlideLeft.addTransitions(z.fade, z.slideLeft);
            z.fadeAndSlideRight.addTransitions(z.slideRight, z.fade);
            z.fadeSlideUpAndRight.addTransitions(z.slideUp, z.fade, z.slideRight);
            z.fadeSlideDownAndLeft.addTransitions(z.slideDown, z.fade, z.slideLeft);
            t.prototype.populateTransitions = function() {
                var B = c.transitions.split(/,\s*/g);
                for (var A in B) {
                    this.transitions.push(z[B[A]])
                }
            };
            t.prototype.getTransition = function() {
                if (c.random) {
                    var A = Math.floor(Math.random() * this.transitions.length);
                    return this.transitions[A]
                } else {
                    this.transitionCount = (this.transitionCount + 1) % this.transitions.length;
                    return this.transitions[this.transitionCount]
                }
            };
            t.prototype.addDivCSS = function() {
                var B = this;
                var C = B.$imgs.eq(B.nextImg);
                var D = "url(" + C.attr("src") + ")";
                var A = C.height();
                this.$divs.each(function() {
                    var E = a(this);
                    E.css({
                        backgroundImage: D,
                        backgroundPosition: "-" + E.css("left") + " 0px",
                        height: A
                    });
                    E.css(B.transition.getCSS(E))
                })
            };
            t.prototype.process = function() {
                j.css({
                    backgroundImage: "url(" + this.$imgs.eq(this.displayImg).attr("src") + ")",
                    backgroundRepeat: "no-repeat"
                });
                this.transition = this.getTransition();
                this.addDivCSS();
                this.transition.applyTransition();
                j.animate({
                    height: this.$imgs.eq(this.nextImg).height()
                },
                c.animateDuration);
                this.advanceShow()
            };
            t.prototype.updateCurrent = function() {
                a('.circle[rel="' + this.displayImg + '"]').removeClass("circle-current");
                a('.circle[rel="' + this.nextImg + '"]').addClass("circle-current")
            };
            t.prototype.advanceShow = function() {
                this.updateCurrent();
                this.displayImg = this.nextImg;
                if (this.nextImg == this.size - 1) {
                    this.nextImg = 0
                } else {
                    this.nextImg++
                }
            };
            t.prototype.startShow = function() {
                this.interval = window.setInterval(a.proxy(this.runner, this), c.displayDuration + c.animateDuration)
            };
            t.prototype.stopShow = function() {
                window.clearInterval(this.interval)
            };
            t.prototype.goToSlide = function(A) {
                if (this.$divs.filter(":animated").size() > 0) {
                    return
                }
                this.stopShow();
                this.nextImg = A;
                this.updateCurrent();
                this.runner();
                if (this.nextImg == 0) {
                    this.displayImg = this.size - 1
                } else {
                    this.displayImg = this.nextImg - 1
                }
                this.startShow()
            };
            t.prototype.applyLink = function() {
                var C = this.$imgs.eq(this.displayImg);
                var B = C.parent();
                if (B.is("a")) {
                    B.removeAttr("style")
                }
                var A = this.$imgs.eq(this.nextImg);
                var D = A.parent();
                if (D.is("a")) {
                    D.css({
                        display: "block",
                        textDecoration: "none",
                        border: "0",
                        width: j.width(),
                        height: A.height(),
                        position: "absolute",
                        top: 0,
                        left: 0,
                        zIndex: 100
                    })
                }
            };
            t.prototype.applyCaption = function() {
                var A = this.$imgs.eq(this.nextImg);
                var C = A.attr("title");
                var D = a(".caption", j);
                D.slideUp(function() {
                    a(this).html(C)
                });
                if (C != "") {
                    if (D.size() > 0) {
                        if (!D.is(":visible")) {
                            D.html(C)
                        }
                        D.slideDown()
                    } else {
                        var B = a('<div><span>' + C + "</span></div>");
                        B.css({
                            opacity: c.captionOpacity,
                            width: j.width(),
                            position: "absolute",
                            top: 0,
                            left: 0,
                            display: "none"
                        });
                        B.appendTo(j);
                        B.slideDown()
                    }
                }
            };
            t.prototype.runner = function() {
                this.applyLink();
                this.applyCaption();
                this.process()
            };
            t.prototype.begin = function() {
                var A = this.$imgs.eq(this.nextImg);
                j.css({
                    backgroundImage: "url(" + A.attr("src") + ")",
                    height: A.height()
                });
                this.runner();
                this.transitionCount--;
                this.startShow()
            };
            var i = Class.extend({
                circleCount: null,
                init: function() {
                    this.circleCount = 0
                },
                addAll: function() {
                    this.addCircles();
                    this.addPrevAndNextLinks();
                    a("a.circle").click(this.circleClickHandler);
                    a(".prev-link").click(this.prevLinkHandler);
                    a(".next-link").click(this.nextLinkHandler);
                    if (c.hideSlideChooser) {
                        a("a.circle").hide()
                    }
                    if (c.hidePrevAndNextArrows) {
                        a(".prev-link, .next-link").hide()
                    }
                },
                addCircles: function() {
                    var A = this;
                    y.$imgs.each(function() {
                        var B = a('<a href="#" rel="' + A.circleCount + '"></a>');
                        B.css({
                            right: (y.size - A.circleCount - 1) * 20 + 10
                        });
                        B.appendTo(j);
                        A.circleCount++
                    })
                },
                addPrevAndNextLinks: function() {
                    a('<a href="#"></a>').appendTo(j);
                    a('<a href="#"></a>').appendTo(j)
                },
                circleClickHandler: function(B) {
                    var A = parseInt(a(this).attr("rel"), 10);
                    y.goToSlide(A);
                    B.preventDefault()
                },
                prevLinkHandler: function(B) {
                    var A = y.displayImg - 1;
                    if (A < 0) {
                        A = y.size - 1
                    }
                    y.goToSlide(A);
                    B.preventDefault()
                },
                nextLinkHandler: function(B) {
                    var A = y.displayImg + 1;
                    if (A >= y.size) {
                        A = 0
                    }
                    y.goToSlide(A);
                    B.preventDefault()
                }
            });
            var l = new i();
            l.addAll();
            y.populateTransitions();
            y.begin()
        });
        return this
    }
})(jQuery);

这已经封装成一个jQuery插件,我们只需简单地调用即可。以上就是这款jQuery百叶窗焦点图的全部代码,你也可以下载源代码来研究,还算简单的。源代码下载>>

时间: 2025-01-29 19:04:56

超酷的jQuery百叶窗图片滑块实现教程的相关文章

jQuery的图片滑块焦点图插件整理推荐_jquery

1.jQuery实现的右侧选项卡焦点图片轮播动画 jQuery实现的右侧选项卡焦点图片轮播动画特效源码,是一段清新可爱的焦点图轮播代码,支持自动轮播与手动点击,是一段不错的焦点图切换代码. 在线演示 源码下载 2.jquery实现的网页缩略图大纲可滑动显示动态 query实现的网页缩略图大纲可滑动显示动态特效源码,是一款拥有网页大纲的缩略图显示的代码,点击滑动缩略图即可看到想要的东西,支持鼠标点击.拖动及鼠标滚动切换显示. 在线演示 源码下载 3.纯CSS3实现的自定义美化UL OL列表的3种发

Illustrator路径混合工具绘制超酷炫的标志字体效果制作教程

给各位Illustrator软件的使用者们来详细的解析分享一下路径混合工具绘制超酷炫的标志字体效果制作教程. 教程分享:                   好了,以上的信息就是小编给各位Illustrator的这一款软件的使用者们带来的详细的路径混合工具绘制超酷炫的标志字体效果制作教程解析分享的全部内容了,各位使用者们看到这里小编相信大家现在是非常的清楚了制作方法了吧,那么各位就快去按照小编上面的教程去绘制自己喜欢的标志字体吧.

Illustrator设计超酷的花纹3D字效果绘制教程

给各位Illustrator软件的使用者们来详细的解析分享一下设计超酷的花纹3D字效果的绘制教程. 教程分享:                   好了,以上的信息就是小编给各位Illustrator的这一款软件的使用者们带来的详细的设计超酷的花纹3D字效果的绘制教程解析分享的全部内容了,各位看到这里的使用者们,小编相信大家现在是非常的清楚了3D字效果制作教程了吧,那么各位就快去按照小编上面的教程自己去制作自己喜欢的3D字吧.

PS合成超酷美女警察woman时尚海报效果教程

最终效果图: 1.新建1090*1250px大小的文件,新建渐变填充图层,渐变颜色从#e8e8e8到#c5c5c5,径向,150%. 2.选择滤镜--转为智能滤镜,转为智能滤镜的好处,就是后面对图层操作的滤镜并不会影响到原图,和新建调成图层是一个意思.. 执行滤镜--添加杂色,设置如下,我们会看到渐变的图层的变化. 3.将汽车素材用钢笔抠出来,拉入画布中,摆放好位置: 4.新建"阴影"图层,放在汽车图层的下面,用钢笔画出如下形状,编辑填充黑色 5.对"阴影"图层执行

PS制作超酷炫彩星空文字效果详细教程

一篇效果十分漂亮的photoshop文字特效教程,主要为大家介绍在photoshop中使用各种滤镜和调整工具制作一款彩色的星云文字. 最终效果 在PS中新建文档: 填充背景色#2d2d2d ,之后调节填充色彩 新建新图层,前景色设定为黑色,背景色设定为白色,之后运行加上杂色滤镜,设定如下. 调整图层模式为图片,不透明度调节到33%,效果如下 分类: PS文字教程

PS合成超酷的森林中的无敌剑客教程

昨天看了电影杀手欧阳盆栽,感觉还行,今天本ps教程学习如何用photoshop合成一个杀手射箭准备置人于死地的场景,主要用到了笔刷和图层样式.         三联推荐:photoshop7.0迷你版免费下载    |  Photoshop CS5 中文免费下载  |  photoshop免费下载 先看效果图. 新建文档2480x3508像素,分辨率300,打开背景图片. 拖入文档中,缩放位移,效果如下. 把背景模糊一下,滤镜>模糊>镜头模糊.

PhotoShop制作超酷的炫光街舞女孩的教程

制作思路:主要利用ps的笔刷还有几张素材图片来给舞者添加炫彩的效果,基本没什么难点. 使用软件:photoshop cs2 先看效果吧 1.打开原图用钢笔工具(快捷键p)勾勒出人物的轮廓.这个要做一个选区下面制作时间会经常用到 2.这一步是吧上面勾勒的路径作为选区存储下来准备后面用.钢笔工具(p)勾勒好好后右键-选择建立选区选择项,然后切换到套索工具(快捷键L)再次右键选择存储选区命令.在通道面板会看到如下图的一个新的通道alpha1.或者可以打开路径面板可以看到广告勾勒好的选区需要用时间直接按

PS制作超酷的半调人物海报效果详细教程

我们打算制作复古效果.你将了解如何创建色调模式,创造性地抠出一个模特提着音响的图片.然后,使用这抠图制作你的设计.我们用一些图层样式将使得所有步骤结合在一起,这样有趣的效果,你可以应用在其他的设计上 第一步 复制一层,调整大小:宽度为500像素,确保调整的比例,高度随宽度而自动调整.命名为音响_最终层,以psd格式保存图片,作为此教程的画布.同时,打开原尺寸图片,我们将从第三步开始使用它来裁剪图像. 第二步 回到音响_最终层,首先裁剪出音响部分,然后是女孩的上部分,下图是裁剪好的女孩. 在图层栏

PS制作超酷的3D立体传媒文字广告教程

效果 前期准备:2-3小时工作时间 Photoshop-?(随意,本人CS2) 下载附件:本文中用到的烟雾笔刷,羽毛,云海背景(来自ZCOOL) 1:新建:1024X678像素(随意) 300DPI(必要精度)RGB颜色 2:复制并填充 57 57 57 3:按D 然后滤镜-渲染-云彩 得到下图 4:新建3个长方形图层 本人颜色设置如下 (此图层将被覆盖,随意颜色) 分类: PS文字教程