JQuery学习(2)


    实现图片列表的自动滚动,单击左右导航的图片移动,以及单击图片放大的功能:

    很多代码细节跟HTML、CSS相关,But······


$(document).ready(function() {
	/* 
	 * this function will make the carousel scroll auto-matically.
	 * it is no different than the scrollRight click function
	 * aside from missing a binding to a click function. 
	 */
	function autoCarousel() {
		//outerWidth(true) 方法返回元素的宽度(包括内边距、边框和外边距),li的宽度设置的160px,itemWidth返回170px;
    	var itemWidth = $('#carouselUL li').outerWidth() + 10;
		//left设置的-340px; 返回的moveFactor为-510px;
        var moveFactor = parseInt($('#carouselUL').css('left')) - itemWidth;
        /* animate the carousel */
		/*
		$(selector).animate({params},speed,callback); -必需的 params 参数定义形成动画的 CSS 属性,可选的 speed 参数规定效果的时长;
		*/
        $('#carouselUL').animate(
            {'left' : moveFactor}, 'slow', 'linear', function(){
                /* put the first item after the last item */
				//:first,:last 是JQuery的选择器;
				//将第一个li放到最后一个li的后边;
                $("#carouselUL li:last").after($("#carouselUL li:first"));
                /* reset left position */              
                $('#carouselUL').css({'left' : '-340px'});
        });
    };
    /* make the carousel scroll automatically when the page loads */
    var moveCarousel = setInterval(autoCarousel, 2000);
	/* set original thumbnail opacity */
    $('.carThumb, #scrollLeft, #scrollRight').css({opacity: 0.5});
    /* set up a hover function to animate the opacity and stop the auto-scroll*/
	//hover(定义了两个函数,用","号分隔),而且用的不是mouse相关函数
    $('.carThumb, #scrollLeft, #scrollRight').hover(function() {
		//stop(stopAll,goToEnd) 方法用于停止动画或效果,在它们完成之前
        $(this).stop().animate({
            opacity: 1
        }, 75); // end mousein
        clearInterval(moveCarousel); //pause the auto-scroll on mouse over
    }, function() {
        $(this).stop().animate({
            opacity: 0.5
        }, 250); // end mouseout
        moveCarousel = setInterval(autoCarousel, 2000); // resume scroll on mouse out
    });
    
    /* click funtion for right scroll */
    $('#scrollRight').click(function(){
        /* calculate how far to move the carousel */
        var itemWidth = $('#carouselUL li').outerWidth() + 10;
        var moveFactor = parseInt($('#carouselUL').css('left')) - itemWidth;
        /* animate the carousel */
        $('#carouselUL').animate(
            {'left' : moveFactor}, 'slow', 'linear', function(){
                /* put the first item after the last item */
                $("#carouselUL li:last").after($("#carouselUL li:first"));
                /* reset left position */              
                $('#carouselUL').css({'left' : '-340px'});
        });
    });

    /* click for left scroll */
    $('#scrollLeft').click(function(){
        /* calculate movement to the left */
    	var itemWidth = $('#carouselUL li').outerWidth() + 10;
        var moveFactor = parseInt($('#carouselUL').css('left')) + itemWidth;
        /* animate the carousel */
        $('#carouselUL').animate(
            {'left' : moveFactor}, 'slow', 'linear', function(){
                /* put the last item before the first */
				/*
				before,after,在被选元素之前、之后插入内容;这里相当于修改了DOM结构;
				*/
                $("#carouselUL li:first").before($("#carouselUL li:last"));
                /* reset the left position */
                $('#carouselUL').css({'left' : '-340px'});
            });
        });
    
    /* click function to load larger pictures */
    $('.carThumb').click( function() {
        /* get the source from our image tag */
        var photoInfo = $(this).attr("src");
        /* split the source by the '/' */
        var photoPathArr = photoInfo.split('/');
        /* the path is the first portion of the array plus a forward slash */
        var photoPath = photoPathArr[0]+'/';
        /* get an array with the photo name in it */
        var photoInfoArr = photoInfo.split('_');
        /* now put it back together for using in the photo container */
        var photoImgTag = '<img src="'+photoPath+photoInfoArr[1]+'" id="currentPhoto" />';
        /* get the name of the modal window */
        var modalID = $(this).attr('rel');
        /* add the tag to the modal window */  
		//html() - 设置或返回所选元素的内容(包括 HTML 标记)     
        $('#' + modalID).html(photoImgTag);
        /* fade in the modal window and add a close button to it */
		//fadeIn的对象一般都有这个属性-display:none
        $('#' + modalID).fadeIn().delay(1000).append('<div class="photoNote"><a href="#" class="closePhoto"><img src="grfx/photoClose.jpg" class="closeX" title="Close Photo" alt="Close" /></a></div>');
        /* set the height of the image to the height of the body -200 pixels to allow for margin */
        var bodyHeight = $('body').height();
		//设置单个CSS属性
        $('#currentPhoto').css('height', (bodyHeight - 200));
        /* 
         * define the margins so that the modal is centered properly on the screen
         * we add 40px to the height/width to accomodate for the padding and border
         * width defined by the image
         */
        var modalMarginTop = ($('#' + modalID).height() + 40) / 2;
        var modalMarginLeft = ($('#' + modalID).width() + 40) / 2;
        /* apply the margins to the modal window */
        $('#' + modalID).css({
            'margin-top' : -modalMarginTop,
            'margin-left' : -modalMarginLeft
        });
        /* fade in the shade */
        $('body').append('<div id="carouselShade"></div>'); // add the shade layer to bottom of the body
        $('#carouselShade').css('opacity', 0.7).fadeIn(); // set the opacity with jQuery to avoid all of the nasty CSS needed for IE
        return false; // keep the link from acting naturally
    });

    /*
     * close the modal and pull down the shade
     */
    $('a.closePhoto, #carouselShade').live('click', function() { // clicking on the close or shade layer
    	var thisModalID = $('a.closePhoto').parent().parent().attr('id');
		
        $('.photoNote, #carouselShade, #'+thisModalID).fadeOut(function() {
			//总结:#id,.class,对象间使用","分隔,也可以是一种层次路径
            $('.photoNote, a.closePhoto, #carouselShade, #currentPhoto').remove();  // remove the shade and the close button
        });
        return false;
    });
});


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。