【jquery】幻灯片效果

闲着无聊,用Jquery写了一个幻灯片效果。

我这人喜欢造轮子,除了jquery这种有强大开发团队的框架级别JS,其实的一些小程序都是尽量自己写。

一是因为怕出问题了没人问,二是自己写的改起来也方便。

效果可参考:

http://www.helloweba.com/demo/supersized/

只是上面这个DEMO用的是supersized,功能比较强大,就是代码加密过了,读起来很困难。

废话不说,代码放上。

CSS:

img.slider-image {
    position:absolute;
    display:none;
    top:0px;
    left:0px;
    z-index:-10;
}
img.slider-image.visible {
    visibility:visible;
  display:inline;
    z-index:-1;
}

JS:

2014-12-11 追加:

我把这段代码加到项目里,然后项目马上要结束的时候发现,这货在IE8下面居然无法正常执行。

原因是fadeIn,fadeOut和window.innerWidth 以及 window.innerHeight在IE下无法正常执行。

好吧,一直都是钟爱Chrome,不用IE调试也是我的原罪。

于是我就在代码里加了一个判断,如果是IE的话,就不用fadeIn,fadeOut,

  

var pic = function (url, parentId,callback) {
    this.url = url;
    this.id = url.split('/').reverse()[0].split('.')[0];
    this.parentId = parentId;
    this.img = null;
    this.isLoaded = false;
    this.load();
    this.callback = callback;
}
pic.prototype = {
    load: function () {
        this.img = new Image();
        this.img.src = this.url;
        this.img.id = this.id;
        this.img.className = "slider-image";

        var pic = this;
        this.img.onload = function () {
            pic.img.onload = null;
            pic.img.height = window.innerHeight;
            pic.img.width = window.innerWidth;
       // 加载完毕,将图片添加到DOM中
            $("#" + pic.parentId).append(pic.img);
            pic.isLoaded = true;
            if (typeof (pic.callback) == "function") {
                pic.callback();
            }
        }
    }
}

var slider = function (opt) {
    this.opt = {
        start: false,// 判断幻灯片开始循环
        index: 0,
        imgsUrl: null,
        interval: 5000,// 幻灯片间隔时间
        id :"slider"// 幻灯片DIV ID
    }
    this.imgs = null;
    $.extend(this.opt,opt);
    this.init();
}
slider.prototype = {
    init: function () {
        var slider = this;
     // 页面添加幻灯片父级DIV
        var div = document.createElement('div');
        div.id = slider.opt.id;
        div.style.display = "block";
        document.body.appendChild(div);

     // 加载图片
        var imagesUrls = this.opt.imgsUrl;
        this.imgs = new Array();
        for (var i = 0; i < imagesUrls.length; i++) {
            this.imgs.push(
                new pic(imagesUrls[i],
                slider.opt.id,
                function () {
            // 图片加载完毕,立即开始循环幻灯片
                    if (!slider.opt.start) {
                        slider.opt.start = true;
                        slider.start();
                    }
                }
            ));
        }
    },
    slide: function (slider) {
        var imagesSrc = slider.imgs;
        var img = imagesSrc[slider.opt.index];

     // 循环播放幻灯片
        slider.opt.index++;
        if (slider.opt.index >= imagesSrc.length) {
            slider.opt.index = 0;
        }
        if (img.isLoaded) {
            // 将正在显示的图片淡出,将下一张图片淡入
            var diplaying = $('#' + slider.opt.id).find('.visible');
        
       // ie 兼容
            if (!jQuery.browser.msie) {
                diplaying.fadeOut(2000);
            } 
           
            diplaying.removeClass("visible");
            var prepare = $("#" + img.id);
            prepare.addClass("visible");

       // ie兼容
            if (jQuery.browser.msie) {
                prepare.css({
                    "width": document.body.clientWidth,
                    "height": document.body.clientHeight
                });
            } else {
                prepare.css({
                    "width": window.innerWidth,
                    "height":window.innerHeight
                });
                prepare.fadeIn(1000);
            }
        } else {
            // 如果这张图片没有加载,则立刻显示下张图片
            slider.slide(slider);
        }
    },
    start: function () {
        var slider = this;
        slider.slide(slider)
        // 间隔一段时间循环播放幻灯片
        setInterval(function () {
            slider.slide(slider);
        }, this.opt.interval);
    }
}

  

 调用的时候,只要执行下面这段代码即可:

new slider({
    imgsUrl: ["/Images/Login/slider1.jpg", "/Images/Login/slider2.jpg", "/Images/Login/slider3.jpg"]
});  
原文地址:https://www.cnblogs.com/nonkicat/p/4087623.html