1. 程式人生 > >jQuery圖片切換動畫效果 處理動畫延遲

jQuery圖片切換動畫效果 處理動畫延遲

最近在寫前端頁面,作為只寫過兩個月前端的人來說,感覺用jq什麼的寫出來自己想要的效果真的是太棒了,剛好今天花了一下午完成了一個圖片切換的特效:

直接上程式碼

效果圖


jq 程式碼,都是自己寫出來的,弄了一下午完成的,初學者,整理以後留著用。

//////
//  2017-2-27 //
//////
$(function(){ 
    var num    = 0;
    var divStr = '#imageShowSmallAnchor'; // 移動 div
    var s      = 300;
    $('.imgNum').click(function(){
        var _this     = $(this);
        var status    = _this.attr('data-status');
        var total_num = _this.parent().find('ul li').length;
        var numSPic   = 4;//最多顯示的小圖的個數
        var src;
        
       
        if(status == 'left'){
            if(num <= 0){
                num = total_num-1;
            }else{
                num--;
            }
        }else{
            if(num >= total_num-1){
                num = 0;
            }else{
                num++;
            }
        }
        // 4 一次做多顯示四張小圖   $("#div").stop(false, true);//讓當前動畫直接到達末狀態 ,繼續下一個動畫
        // 第一種情況 當小圖數量小於5時, 直接進行右移。
        if (total_num <= numSPic) {$(divStr).stop(true,false).animate(
            {left:num*106+39+"px"},s);
        } else{
            ////////
            // 圖片左移 //
            ////////
        	if (status == 'left') { 
        		if (num < total_num - numSPic) {
        			_this.parent().find('ul li').eq(num).show();
        		} else{
                    // 特殊情況  左移時,從第一張圖切換到最後一張圖時 
                    // if判斷 當前是否顯示最後張圖,如果不是最後一張圖 則當變成右移時,無需重新整理小圖的顯示狀態。
                    // 左移時,需要將李 全部隱藏後, 再將最後的 numSPice 張圖顯示出來,
        			if (num == total_num - 1) {
        				_this.parent().find('ul li').hide();
	        			for (var x = total_num-1; x >= total_num - numSPic; x--) {
		        			_this.parent().find('ul li').eq(x).show();
		        		}
        			}
        		}
        	} else{
                ////////
                // 圖片右移 //
                ////////
        		if (num >= numSPic) {
        			_this.parent().find('ul li').eq(num-numSPic).hide();
        		} else{
                    // 特殊情況  右移時,從最後一張圖切換到第一張圖時 
                    // 判斷 是否是第一張圖, 如果不是則再變成左移時,無需重新整理小圖的顯示狀態
        			if (num == 0) {
        				for (var x = 0; x < numSPic; x ++) {
		        			_this.parent().find('ul li').eq(x).show();
		        		}
        			}
        		}
        	}
            // 快速點選切換時嗎,動畫出現滯後和反覆問題,
            // 讓當前動畫直接到達末狀態 ,繼續下一個動畫 $('#div').stop(false, ture); $('#div').stop().animate(); 集合使用效果更佳。
        	$(divStr).stop(false, true);
            ////////
            // 樣式左移 //
            ////////
        	if (status == 'left') {
                // 39 定位divStr 的left距離 父級元素的畫素距離
                // 等樣式移動到最右邊時,樣式位置固定
                // $(divStr).position().left 獲取定位元素 left值。
	        	if ($(divStr).position().left <= 39 ) {
	        		$(divStr).stop().animate({left:"39px"});
                    // 當從第一張切換到最後一張時,樣式應在最右邊。
	        		if (num==total_num-1) {
	        			$(divStr).stop().animate({left:3 * 106 + 39 + "px"},s);
	        		}
	        	} else{
	        		$(divStr).stop().animate({left:"-=106px"},s);
	        	}
	        } else{
                ////////
                // 樣式右移 //
                ////////
	        	if ($(divStr).position().left >= 357) {
	        		$(divStr).stop().animate({left:"357px"});
                    // 當從最後一張切換到第一張時,樣式應在最左邊。
	        		if (num==0) {
	        			$(divStr).stop().animate({left:"39px"},s);
	        		}
	        	} else{
	        		$(divStr).stop().animate({left:"+=106px"},s);
	        	}
	        }
        }
        src = _this.parent().find('ul li').eq(num).find('img').attr('src');
        _this.parents('.xq-imgSW').find('.imgSW-top li img').attr('src',src);
    });
	
	// 點選小圖切換 大圖 和小圖上的樣式。
	$('.imgSW-bt li').click(function(){
		var _this = $(this);
		var src;
		num = _this.index();
		// parseInt(10/3); 整除
        // 獲取點選的位置,來計算 樣式的位置。 
		var X = parseInt(_this.position().left/106);

		$(divStr).stop().animate({left:X*106+39+"px"},s);
		src = _this.find('img').attr('src');
		_this.parents('.xq-imgSW').find('.imgSW-top li img').attr('src',src);
	});
});
HTML 介面程式碼:
<div class="xq-imgSW">
        <div class="imgSW-top">
            <ul>
                <li><img src="images/xq-img1.png" alt=""></li>
            </ul>
        </div>
        <div class="clear"></div>
        <div class="imgSW-bt">
            <input class="imgSW-zuo imgNum" type="button" data-status="left">
            <div id="imageShowSmallAnchor"></div>
            <ul>
                <li class="imgSW-xz"><img class="imgex" src="images/xq-img-s1.png" style="width:90px;height:60px;" alt="">
                	<div class="imgSW-bot">戶型1</div>
                </li>
                
               <li><img src="images/xq-img-s2.png" style="width:90px;height:60px;" alt="">
                	<div class="imgSW-bot">戶型2</div>
                </li>
                <li><img src="images/xq-img-s3.png" style="width:90px;height:60px;" alt="">
                	<div class="imgSW-bot">戶型3</div>
                </li>
                <li><img src="images/xq-img-s4.png" style="width:90px;height:60px;" alt="">
                	<div class="imgSW-bot">戶型4</div>
                </li>
                <li><img src="images/xq-img-s4.png" style="width:90px;height:60px;" alt="">
                	<div class="imgSW-bot">戶型5</div>
                </li>
                <li><img src="images/xq-img-s4.png" style="width:90px;height:60px;" alt="">
                	<div class="imgSW-bot">戶型6</div>
                </li>
                <li><img src="images/xq-img-s4.png" style="width:90px;height:60px;" alt="">
                	<div class="imgSW-bot">戶型7</div>
                </li>
                <li><img src="images/xq-img-s4.png" style="width:90px;height:60px;" alt="">
                	<div class="imgSW-bot">戶型8</div>
                </li>
            </ul>
            <input class="imgSW-you imgNum" data-status="right" type="button">
        </div>
    </div>
<div id="imageShowSmallAnchor"></div> 是定位上去的,
另外:

快速點選是會出現動畫延遲想想,影響體驗,

處理動畫延遲jQuery stop()語法,

$("#div").stop();//停止當前動畫,繼續下一個動畫  $("#div").stop(true);//清除元素的所有動畫        $("#div").stop(false, true);//讓當前動畫直接到達末狀態 ,繼續下一個動畫 $("#div").stop(true, true);//清除元素的所有動畫,讓當前動畫直接到達末狀態

在jq中有用到並有註釋。

// 讓當前動畫直接到達末狀態 ,繼續下一個動畫 $('#div').stop(false, ture); $('#div').stop().animate(); 集合使用效果更佳。

作為前端新手,記錄下,以後可能會用到,