jQuery图片轮播(一)轮播实现并封装

利用面向对象自己动手写了一个封装好的jquery轮播对象,可满足一般需求,需要使用时只需调用此对象的轮播方法即可。

demo:https://github.com/zsqosos/shopweb

具体代码如下:

HTML结构:

 1 <div class="banner" id="J_bg_ban">
 2   <ul>
 3     <li><a href="#"><img src="banner_04.jpg" alt="广告图 /></a></li>
 4     <li><a href="#"><img src="banner_04.jpg" alt="广告图 /></a></li>
 5     <li><a href="#"><img src="banner_03.jpg" alt="广告图"/></a></li>
 6     <li><a href="#"><img src="banner_04.jpg" alt="广告图"/></a></li>
 7     <li><a href="#"><img src="banner_05.jpg" alt="广告图"/></a></li>
 8   </ul>
 9   <div class="indicator" id="J_bg_indicator">
10   </div>
11   <div class="ban-btn clearfloat" id="J_bg_btn">
12     <a class="next-btn fr" href="javascript:">&gt;</a><a class="prev-btn fl" href="javascript:">&lt;</a>
13   </div>
14 </div>

css样式:

.banner {
    height: 325px;
    width: 812px;
    position: relative;
    overflow: hidden;
}
.banner ul li{
    position: absolute;  top: 0;  left: 0;
}
.banner ul li img{
    height: 325px;
    width: 812px;
    display: block;
}
.ban-btn{
    width: 100%;
    position: absolute;
    top: 136px;
    z-index: 2;
}
.ban-btn a{
    display: inline-block;
    height: 60px;
    width: 35px;
    background: rgba(180,180,180,0.5);
    font-size: 25px;
    text-align: center;
    line-height: 60px;
    color: #fff;
}
.ban-btn a:hover{
    background: rgba(100,100,100,0.5);
}
.indicator{
    width: 100%;
    position: absolute;
    text-align: center;
    bottom: 15px;
    z-index: 2;
}
.indicator a{
    display: inline-block;
    width: 20px;
    height: 5px;
    margin:0 3px;
    background: #fff;
}
.indicator-active{
    background: #FF8C00!important;
}

jquery代码:

$.carousel = {
    now : 0,                    //当前显示的图片索引
    hasStarted : false,         //是否开始轮播
    interval : null,            //定时器
    liItems : null,             //要轮播的li元素集合
    len : 0,                    //liItems的长度
    aBox : null,                //包含指示器的dom对象
    bBox : null,                //包含前后按钮的dom对象

    /**
     * 初始化及控制函数
     * @param bannnerBox string 包含整个轮播图盒子的id或class
     * @param aBox  string 包含指示器的盒子的id或class
     * @param btnBox string 包含前后按钮的盒子的id或class
     */
    startPlay : function(bannnerBox,aBox,btnBox) {
        //初始化对象参数
        var that = this;
        this.liItems = $(bannnerBox).find(‘ul‘).find(‘li‘);
        this.len = this.liItems.length;
        this.aBox = $(bannnerBox).find(aBox);
        this.bBox = $(bannnerBox).find(btnBox);
        //让第一张图片显示,根据轮播图数量动态创建指示器,并让第一个指示器处于激活状态,隐藏前后按钮
        this.liItems.first(‘li‘).css({‘opacity‘: 1, ‘z-index‘: 1}).siblings(‘li‘).css({‘opacity‘: 0, ‘z-index‘: 0});
        var aDom = ‘‘;
        for (var i = 0; i < this.len; i++){
            aDom += ‘<a></a>‘;
        }
        $(aDom).appendTo(this.aBox);
        this.aBox.find(‘a:first‘).addClass("imgnum-active");
        this.bBox.hide();
        //鼠标移入banner图时,停止轮播并显示前后按钮,移出时开始轮播并隐藏前后按钮
        $(bannnerBox).hover(function (){
            that.stop();
            that.bBox.fadeIn(200);
        }, function (){
            that.start();
            that.bBox.fadeOut(200);
        });
        //鼠标移入指示器时,显示对应图片,移出时继续播放
        this.aBox.find(‘a‘).hover(function (){
            that.stop();
            var out = that.aBox.find(‘a‘).filter(‘.indicator-active‘).index();
            that.now = $(this).index();
            if(out!=that.now) {
                that.play(out, that.now)
            }
        }, function (){
            that.start();
        });
        //点击左右按钮时显示上一张或下一张
        $(btnBox).find(‘a:first‘).click(function(){that.next()});
        $(btnBox).find(‘a:last‘).click(function(){that.prev()});
        //开始轮播
        this.start()
    },
    //前一张函数
    prev : function (){
        var out = this.now;
        this.now = (--this.now + this.len) % this.len;
        this.play(out, this.now);
    },
    //后一张函数
    next : function (){
        var out = this.now;
        this.now = ++this.now % this.len;
        this.play(out, this.now);
    },
    /**
     * 播放函数
     * @param out number 要消失的图片的索引值
     * @param now number 接下来要轮播的图的索引值
     */
    play : function (out, now){
        this.liItems.eq(out).stop().animate({opacity:0,‘z-index‘:0},500).end().eq(now).stop().animate({opacity:1,‘z-index‘:1},500);
        this.aBox.find(‘a‘).removeClass(‘imgnum-active‘).eq(now).addClass(‘indicator-active‘);
    },
    //开始函数
    start : function(){
        if(!this.hasStarted) {
            this.hasStarted = true;
            var that = this;
            this.interval = setInterval(function(){
                that.next();
            },2000);
        }
    },
    //停止函数
    stop : function (){
        clearInterval(this.interval);
        this.hasStarted = false;
    }
};

$(function(){  $.carsouel.startPlay(‘#J_bg_bn‘,‘#J_bg_indicator‘,‘#J_bg_btn‘);})

最初实现时使用面向过程的方法来完成,虽然可以达到想要的效果,但代码复用性不高,需要为页面上每一个需要轮播的模块分别写对应的函数。进行封装后,不需要写太多的代码,使用时只需调用carsouel的startPlay方法并传入三个参数即可,大大提高了易用性。

但是,当前代码的缺陷也非常明显,就是当一个页面上同时有多个轮播件需要轮播时,只有最后一个会正常工作,这是由于carsouel对象只有一个,可以通过复制carsouel对象来解决这个问题,如:

    var banner1 = $.extend(true,{},carousel);
    var banner2 = $.extend(true,{},carousel);
    var banner3 = $.extend(true,{},carousel);
    banner1.startPlay(‘#J_bg_ban1‘,‘#J_bg_indicator1‘,‘#J_bg_btn1‘);
    banner2.startPlay(‘#J_bg_ban2‘,‘#J_sm_indicator2‘,‘#J_bg_btn2‘);
    banner3.startPlay(‘#J_bg_ban3‘,‘#J_sm_indicator3‘,‘#J_bg_btn3‘);

这样虽然可以满足需求,但每次调用都会复制出一个新的对象,不仅影响性能,carsouel对象内的方法还不能够重用,所以还需要进一步改进。

要想让多个轮播件可以同时使用carsouel对象,并且可以复用carsouel对象内部的函数,必须将carsouel对象作为一个构造函数或原型对象,每次需要使用时在进行实例化操作,这样可满足多个轮播件同时使用的需求,同时做到最大化的函数复用。我会在后续的文章中解决这个问题,欢迎关注或提出指导。

我是一个javascript的初学者,这是我第一次发文,对于上述问题我会继续努力,寻求最好的解决方法。感谢你们看完。给自己说个加油吧。

时间: 2024-10-20 10:30:45

jQuery图片轮播(一)轮播实现并封装的相关文章

jQuery 图片轮播

图片轮播效果图 如上 思路: 1.每隔一定的时间切换一张图片:javascript中的setTimeout()和setInterval()符合条件,注意两者之间的区别. 2.循环问题:定义一个全局变量num,每切换了一张图片,num++,但因为是死循环,num可能无限大,用num=num%图片个数,可以保证num的值不大于图片个数. 关键代码: 1 //图片与数字的轮播 2 function sonCarousel(){ 3 //隐藏所有的图片,使所有的数字背景为灰色 4 $("."+

jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承

上一篇文中完成的封装,还存在一个小问题,就是该轮播对象不能在同一页面中重复使用,本文将通过组合使用javascript的构造函数和原型模式创建对象来解决这个问题. 没有看过上一篇文章的朋友可以点此查看上一篇文章 (jQuery图片轮播(一)轮播实现并封装) 首先回顾一下,上文的问题所在,上文中的carsouel对象是采用字面量的方式来定义的,这样carsouel本就是一个实例,想要使用在多处时,这个对象的方法会发生冲突,最终只会执行最后的那一个.而通过采用构造函数的方式来定义对象carsouel

12款经典的白富美型—jquery图片轮播插件—前端开发必备

图片轮播是网站中的常用功能,用于在有限的网页空间内展示一组产品图片或者照片,同时还有非常吸引人的动画效果.本文向大家推荐12款实用的 jQuery 图片轮播效果插件,帮助你在你的项目中加入一些效果精美的图片轮播效果,希望这些插件能够帮助到你.Nivo Slider 首先推荐的这款插件号称世界上最棒的图片轮播插件,有独立的 jQuery 插件和 WordPress 插件两个版本. 目前下载量已经突破 1,800,000 次!jQuery 独立版本的插件主要有如下特色: ?  16个独特的过渡效果?

Nivo Slider - 世界上最棒的 jQuery 图片轮播插件

Nivo Slider 号称世界上最棒的图片轮播插件,有独立的 jQuery 插件和 WordPress 插件两个版本.目前下载量已经突破 1,800,000 次!jQuery 独立版本的插件主要有如下特色: ?  16个独特的过渡效果 ?  简洁和有效的标记 ?  加载参数设置 ?  内置方向和导航控制 ?  压缩版本大小只有12KB ?  支持链接图像 ?  支持 HTML 标题 ?  3套精美光滑的主题 ?  在MIT许可下免费使用 ?  支持响应式设计 插件下载     效果演示 您可能

笔记30多款jQuery图片展示/幻灯片图片轮播切换

1.号称最好的JQUERY幻灯片-NIVO SLIDER JQUERY幻灯片-NIVO SLIDER,jquery图片切换 演示下载地址 2.小米3发布官网jQuery焦点图全屏大图 演示下载地址 小米3发布官网jQuery焦点图是一款小米手机3发布官网淡入淡出切换的jquery焦点图,带索引按钮,自动播放.

jquery特效(3)—轮播图①(手动点击轮播)

今天上班做设计做的头疼,就写了一个轮播图练练手,先写了一个手动点击轮播的轮播图,随后我会慢慢接着深入写自动轮播图和鼠标悬浮图片停止移动轮播图等~~~~~~虽然今天我生日,但是代码还是得写的,不能找借口放松自己,原地踏步也算后退~~~~ 下面来看看最终做的手动点击轮播效果: 哈哈哈,有没有看出来我的四张图片都是美男子哦~~~~找个赏心悦目的图片真不容易,这样才能激起我写轮播图的代码欲望,写出来就可以点击按钮翻他们牌子了~~~~ 一.原理说明 (1)首先是轮播图的架构,我采用了一个最外边的大div包

jquery特效(4)—轮播图②(定时自动轮播)

今天逛了一天街,把田子坊.人民广场.静安寺公园遛了一遍,吃了很多好吃的东西~~~然后就回公司好好地研究代码了,也算是把定时自动轮播程序写出来了,特意说明一下,这次的轮播图是在昨天随笔中jquery特效(3)—轮播图①(手动点击轮播)的基础上写出来的,也就是本次随笔展示的是手动点击轮播效果以及定时自动轮播效果的程序,建议想连贯学习的小伙伴把我昨天写的笔记看完后再看这篇文章~~~~ 下面来看看我做的最终定时自动轮播效果以及手动点击轮播效果: 对于上面的展示动画速度比较快的原因是因为我的截图软件是绿色

分别用css3、JS实现图片简单的无缝轮播功效

本文主要介绍分别使用CSS3.JS实现图片简单无缝轮播功效: 一.使用CSS3实现:利用animation属性 (实现一张一张的轮播,肉眼只看见一张图片) HTML部分比较简单,两个div下包着几个img标签:为了实现无缝轮播,注意第一张图片要与最后一张图片相同: <div class="out"> <div class="imgs"> <img src="img/beatuy.jpg"/> <img s

图片切换(非轮播,淡入淡出)--变形金刚joy007 项目总结

图片切换(非轮播,淡入淡出) 1.切换2.停止 <html> <head> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"> <style type="text/css"> div{ position: absolute; left: 0px; top: 0px;} .div1{ width: 800px; hei

jQuery图片插件自动轮播原理解析

经常看到项目要用到图片轮播效果,一般的操作流程都是先到网上找一个好看的JQuery图片轮播插件,然后看下demo,再配下参数.好了,关机下班回家 其余的就交给插件吧. 是不是感觉有了jQuery,世界变得那么美好呢. 本人最近用的一个插件是 jquery.carousel.js,官方网站是:http://richardscarrott.co.uk/posts/view/jquery-carousel-plugin 下面,我们来讨论一下图片轮播原理. 首先来个简单的demo 效果图如下: 这是个导