论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Javascript教程
Tag:验证,特效,入门,实例,验证,表单,特效,正则表达式,跑马灯,document,函数,代码,getElementByID,菜单,图片,视频教程

JS实现carousel相册效果源码

文章类别:Javascript | 发表日期:2010-3-27 14:08:41

21视频教程网3月27日整理

 

 

YAO.YAlbum = function(oConfig){
    var oSelf = this;
    this.oCarousel = new YAO.Carousel({ // 初始配置处理了下,可以直接用我设计好的插件名称,也可以自己配置,主要是写了YLIGHTBOX后,发现扩展性的问题。
        btnPrevious: (oConfig && oConfig.btnPrevious) ? oConfig.btnPrevious : oSelf.CARSOUEL_BTN_PREVIOUS,
        Container: (oConfig && oConfig.Container) ? oConfig.Container : oSelf.CARSOUEL_CONTAINER,
        Scroller: (oConfig && oConfig.Scroller) ? oConfig.Scroller : oSelf.CARSOUEL_SCROLLER,
        btnNext: (oConfig && oConfig.btnNext) ? oConfig.btnNext : oSelf.CARSOUEL_BTN_NEXT,
        items: (oConfig && oConfig.items) ? oConfig.items : oSelf.CARSOUEL_ITEM_TAG,
        stepWidth: (oConfig && oConfig.stepWidth) ? oConfig.stepWidth : oSelf.CARSOUEL_STEP_WIDTH
    });
    this.oSamples = this.oCarousel.Scroller.getElementsByTagName('a') || null;
    this.length = this.oSamples.length || 0;
    this.lastSample = this.oSamples[0] || null;
    this.photoContainer = (oConfig && oConfig.photoContainer) ? (YAO.isString(oConfig.photoContainer) ? YAO.getEl(oConfig.photoContainer) : oConfig.photoContainer) : (YAO.getEl(this.PHOTO_CONTAINER_ID) || null);
    this.photo = (oConfig && oConfig.photo) ? (YAO.isString(oConfig.photo) ? YAO.getEl(oConfig.photo) : oConfig.photo) : (YAO.getEl(this.PHOTO_ID) || null);
    this.photoIntro = (oConfig && oConfig.photoIntro) ? (YAO.isString(oConfig.photoIntro) ? YAO.getEl(oConfig.photoIntro) : oConfig.photoIntro) : (YAO.getEl(this.PHOTO_INTRO_ID) || null);
    this.PHOTO_MAX_WIDTH = (oConfig && oConfig.photoMaxWidth) ? oConfig.photoMaxWidth : this.PHOTO_MAX_WIDTH;
    this.sIntro = this.photo.alt || '';
    
    this.init();
};
YAO.YAlbum.prototype.lastIndex = 0;
YAO.YAlbum.prototype.isLoading = false;
YAO.YAlbum.prototype.lastPhotoHeight = 0;
YAO.YAlbum.prototype.loadShardow = null;
YAO.YAlbum.prototype.loadImg = null;
YAO.YAlbum.prototype.btnPrevious = null;
YAO.YAlbum.prototype.btnNext = null;
YAO.YAlbum.prototype.CARSOUEL_BTN_PREVIOUS = YAO.getEl('carousel_btn_lastgroup');
YAO.YAlbum.prototype.CARSOUEL_CONTAINER = YAO.getEl('carousel_container');
YAO.YAlbum.prototype.CARSOUEL_SCROLLER = YAO.getEl('samples_list');
YAO.YAlbum.prototype.CARSOUEL_BTN_NEXT = YAO.getEl('carousel_btn_nextgroup');
YAO.YAlbum.prototype.CARSOUEL_ITEM_TAG = 'li';
YAO.YAlbum.prototype.CARSOUEL_STEP_WIDTH = 672;
YAO.YAlbum.prototype.PHOTO_MAX_WIDTH = 800;
YAO.YAlbum.prototype.PHOTO_CONTAINER_ID = 'carousel_photo_container';
YAO.YAlbum.prototype.PHOTO_ID = 'carousel_photo';
YAO.YAlbum.prototype.PHOTO_INTRO_ID = 'carousel_photo_intro';
YAO.YAlbum.prototype.BTN_NEXT_ID = 'carousel_next_photo';
YAO.YAlbum.prototype.BTN_NEXT_CLASS = 'next';
YAO.YAlbum.prototype.BTN_PREVIOUS_ID = 'carousel_previous_photo';
YAO.YAlbum.prototype.BTN_PREVIOUS_CLASS = 'previous';
YAO.YAlbum.prototype.BTN_DISABLED_CLASS = 'dis';
YAO.YAlbum.prototype.IMG_BTN_PREVIOUS = 'url(img/last-photo.gif)';
YAO.YAlbum.prototype.IMG_BTN_NEXT = 'url(img/next-photo.gif)';
YAO.YAlbum.prototype.SHARDOW_ID = 'carousel_photo_shardow';
YAO.YAlbum.prototype.LOAD_IMG_PATH = 'img/loading.gif';
YAO.YAlbum.prototype.LOAD_IMG_ID = 'carousel_photo_loading';
YAO.YAlbum.prototype.init = function(){
    var oSelf = this, i;
    
    YAO.addClass(this.lastSample, 'current');
    this.btnPrevious = YAO.Builder.Node('a', {
        href: oSelf.oSamples[oSelf.lastIndex].href,
        id: oSelf.BTN_PREVIOUS_ID,
        className: oSelf.BTN_PREVIOUS_CLASS,
        title: '上一张'
    }, '上一张');
    this.photoContainer.appendChild(this.btnPrevious);
    this.btnNext = YAO.Builder.Node('a', {
        href: oSelf.oSamples[oSelf.lastIndex + 1].href,
        id: oSelf.BTN_NEXT_ID,
        className: oSelf.BTN_NEXT_CLASS,
        title: '下一张'
    }, '下一张');
    this.photoContainer.appendChild(this.btnNext);
    this.load(this.photo.src);
    
    YAO.on(this.btnPrevious, 'click', function(event){
        var evt = event || window.event;
        this.Previous();
        YAO.stopEvent(evt);
    }, this.btnPrevious, oSelf);
    YAO.on(this.btnNext, 'click', function(event){
        var evt = event || window.event;
        this.Next();
        YAO.stopEvent(evt);
    }, this.btnNext, oSelf);
    
    for (i = 0; i < this.length; ++i) {
        YAO.on(this.oSamples[i], 'click', function(index){
            return function(event){
                var evt = event || window.event, curSample = this.oSamples[index];
                if (this.lastSample !== curSample && !this.isLoading) {
                    this.lastIndex = index;
                    this.btnsEnabled();
                    this.chgPhoto();
                }
                YAO.stopEvent(evt);
            }
        }(i), this.oSamples[i], oSelf);
    }
};
YAO.YAlbum.prototype.btnsEnabled = function(){
    if (this.lastIndex !== 0 && YAO.hasClass(this.btnPrevious, this.BTN_DISABLED_CLASS)) {
        YAO.removeClass(this.btnPrevious, this.BTN_DISABLED_CLASS);
        if (YAO.ua.ie) {
            this.btnPrevious.style.backgroundImage = this.IMG_BTN_PREVIOUS;
        }
        this.btnPrevious.href = this.oSamples[this.lastIndex - 1];
    }
    else {
        if (this.lastIndex === 0) {
            YAO.addClass(this.btnPrevious, this.BTN_DISABLED_CLASS);
            if (YAO.ua.ie) {
                this.btnPrevious.style.backgroundImage = 'none';
            }
            this.btnPrevious.href = this.oSamples[this.lastIndex];
        }
    }
    if (this.lastIndex !== (this.length - 1) && YAO.hasClass(this.btnNext, this.BTN_DISABLED_CLASS)) {
        YAO.removeClass(this.btnNext, this.BTN_DISABLED_CLASS);
        if (YAO.ua.ie) {
            this.btnNext.style.backgroundImage = this.IMG_BTN_NEXT;
        }
        this.btnNext.href = this.oSamples[this.lastIndex + 1];
    }
    else {
        if (this.lastIndex === (this.length - 1)) {
            YAO.addClass(this.btnNext, this.BTN_DISABLED_CLASS);
            if (YAO.ua.ie) {
                this.btnNext.style.backgroundImage = 'none';
            }
            this.btnNext.href = this.oSamples[this.lastIndex];
        }
    }
};                    
YAO.YAlbum.prototype.load = function(path){
    var oImage = new Image(), oDf = document.createDocumentFragment();
    oImage.src = path;
    
    if (oImage.complete) {
        this.resize(oImage);
    }
    else {
        this.isLoading = true;
        this.loadShardow = YAO.Builder.Node('div', {
            id: this.SHARDOW_ID
        });
        this.loadImg = YAO.Builder.Node('img', {
            src: this.LOAD_IMG_PATH,
            id: this.LOAD_IMG_ID
        });
        oDf.appendChild(this.loadShardow);
        if (YAO.ua.ie) {
            this.loadShardow.style.height = this.lastPhotoHeight ? this.lastPhotoHeight + 'px' : this.photoContainer.offsetHeight + 'px';
        }
        oDf.appendChild(this.loadImg);
        this.photoContainer.appendChild(oDf);
        YAO.on(oImage, 'load', function(){
            this.resize(oImage);
        }, oImage, this);
    }
};
YAO.YAlbum.prototype.resize = function(oImage){
    var oSelf = this;
    var width = oImage.width;
    var height = oImage.height;
    var percent = width / height;
    if (width > this.PHOTO_MAX_WIDTH) {
        width = this.PHOTO_MAX_WIDTH;
        height = width / percent;
    }
    if (YAO.ua.ie) {
        this.lastPhotoHeight = height;
        YAO.setStyles(this.btnPrevious, {
            height: height + 'px',
            backgroundImage: oSelf.IMG_BTN_PREVIOUS
        });
        YAO.setStyles(this.btnNext, {
            height: height + 'px',
            backgroundImage: oSelf.IMG_BTN_NEXT
        });
    }
    if (this.lastIndex === 0) {
        YAO.addClass(this.btnPrevious, this.BTN_DISABLED_CLASS);
        if (YAO.ua.ie) {
            this.btnPrevious.style.backgroundImage = 'none';
        }
    }
    if (this.lastIndex === (this.length - 1)) {
        YAO.addClass(this.btnNext, this.BTN_DISABLED_CLASS);
        if (YAO.ua.ie) {
            this.btnNext.style.backgroundImage = 'none';
        }
    }
    this.photoIntro.innerHTML = this.sIntro;
    YAO.setStyle(this.photoContainer, 'width', (width + 'px'));
    YAO.setStyles(this.photo, {
        width: width + 'px',
        height: height + 'px'
    });
    if (this.loadImg && this.loadShardow) {
        this.isLoading = false;
        this.photoContainer.removeChild(this.loadImg);
        this.loadImg = null;
        this.photoContainer.removeChild(this.loadShardow);
        this.loadShardow = null;
    }
};
YAO.YAlbum.prototype.Previous = function(){
    if (this.lastIndex !== 0) {
        this.lastIndex -= 1;
        if (YAO.hasClass(this.btnNext, this.BTN_DISABLED_CLASS)) {
            YAO.removeClass(this.btnNext, this.BTN_DISABLED_CLASS);
        }
        if (this.lastIndex >= 1) {
            this.btnPrevious.href = this.oSamples[this.lastIndex - 1].href;
        }
        if (this.lastIndex < 0) {
            this.lastIndex = 0;
            YAO.addClass(this.btnPrevious, this.BTN_DISABLED_CLASS);
            this.btnPrevious.href = this.oSamples[this.lastIndex].href;
        }
        this.btnNext.href = this.oSamples[this.lastIndex+1].href;
        this.chgPhoto();
    }
};
YAO.YAlbum.prototype.Next = function(){
    if (this.lastIndex < (this.length - 1)) {
        this.lastIndex += 1;
        if (YAO.hasClass(this.btnPrevious, this.BTN_DISABLED_CLASS)) {
            YAO.removeClass(this.btnPrevious, this.BTN_DISABLED_CLASS);
        }
        if (this.lastIndex <= (this.length - 2)) {
            this.btnNext.href = this.oSamples[this.lastIndex + 1].href;
        }
        if (this.lastIndex > (this.length - 1)) {
            this.lastIndex = (this.length - 1);
            YAO.addClass(this.btnNext, this.BTN_DISABLED_CLASS);
            this.btnNext.href = this.oSamples[this.lastIndex].href;
        }
        this.btnPrevious.href = this.oSamples[this.lastIndex-1].href;
        this.chgPhoto();
    }
};
YAO.YAlbum.prototype.chgPhoto = function(){
    var path = '';
    this.sIntro = this.oSamples[this.lastIndex].title;
    path = this.oSamples[this.lastIndex].href;
    YAO.removeClass(this.lastSample, 'current');
    YAO.addClass(this.oSamples[this.lastIndex], 'current');
    this.lastSample = this.oSamples[this.lastIndex];
    this.photo.src = path;
    this.load(path);
    this.scroll();
};
YAO.YAlbum.prototype.scroll = function(){
    var curScreen = Math.ceil(((this.lastIndex + 1) * this.oCarousel.itemWidth) / this.oCarousel.stepWidth) - 1;
    if (curScreen != this.oCarousel.movedNum) {
        this.oCarousel.scroll(curScreen);
        this.oCarousel.movedNum = curScreen;
        if (this.oCarousel.movedNum !== 0 && YAO.hasClass(this.oCarousel.lnkBtnPrevious, this.BTN_DISABLED_CLASS)) {
            YAO.removeClass(this.oCarousel.lnkBtnPrevious, this.BTN_DISABLED_CLASS);
        }
        else {
            if (this.oCarousel.movedNum === 0) {
                YAO.addClass(this.oCarousel.lnkBtnPrevious, this.BTN_DISABLED_CLASS);
            }
        }
        if (this.oCarousel.movedNum !== this.oCarousel.maxMovedNum && YAO.hasClass(this.oCarousel.lnkBtnNext, this.BTN_DISABLED_CLASS)) {
            YAO.removeClass(this.oCarousel.lnkBtnNext, this.BTN_DISABLED_CLASS);
        }
        else {
            if (this.oCarousel.movedNum === this.oCarousel.maxMovedNum) {
                YAO.addClass(this.oCarousel.lnkBtnNext, this.BTN_DISABLED_CLASS);
            }
        }
    }
};

视频教程列表
文章教程搜索
 
Javascript推荐教程
Javascript热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058