相應的工具:
- bootstrap
- jQuery
材料:
- 4張640x340的圖片
- 4張2000x410內容相同的圖片
原理及實現方法:
- 當屏幕寬度大於等於768px時,圖片使用大圖,輪播圖里的div高度固定,寬度為窗口的寬度(隨窗口寬度的變化而變化)
- 當屏幕寬度小於768px(手機)時,將圖片換為小圖,並在div里生成img標簽,img的寬高隨窗口變化而變化,包裹img的div也隨之變化
- html代碼
1 <section id="main_ad" class="carousel slide" data-ride="carousel"> 2 <!-- 活動指示器 --> 3 <ol class="carousel-indicators"> 4 <li data-target="#main_ad" data-slide-to="0" class="active"></li> 5 <li data-target="#main_ad" data-slide-to="1"></li> 6 <li data-target="#main_ad" data-slide-to="2"></li> 7 <li data-target="#main_ad" data-slide-to="3"></li> 8 </ol> 9 <!-- 輪播項 --> 10 <div class="carousel-inner" role="listbox"> 11 <div class="item active" data-image-lg="img/slide_01_2000x410.jpg" data-image-xs="img/slide_01_640x340.jpg"></div> 12 <div class="item" data-image-lg="img/slide_02_2000x410.jpg" data-image-xs="img/slide_02_640x340.jpg"></div> 13 <div class="item" data-image-lg="img/slide_03_2000x410.jpg" data-image-xs="img/slide_03_640x340.jpg"></div> 14 <div class="item" data-image-lg="img/slide_04_2000x410.jpg" data-image-xs="img/slide_04_640x340.jpg"></div> 15 </div> 16 <!-- 控制按鈕 --> 17 <a class="left carousel-control" href="#main_ad" role="button" data-slide="prev"> 18 <span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span> 19 <span class="sr-only">Previous</span> 20 </a> 21 <a class="right carousel-control" href="#main_ad" role="button" data-slide="next"> 22 <span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span> 23 <span class="sr-only">Next</span> 24 </a> 25 </section>
- css代碼
1 #main_ad .carousel-inner .item{ 2 background-size: cover; /*讓圖片覆蓋滿整個div*/ 3 background-position: center,center; /*讓圖片在div里水平垂直居中*/ 4 background-repeat: no-repeat; 5 height: 410px; 6 } 7 @media (max-width:768px) { 8 #main_ad .carousel-inner .item { 9 height: auto; 10 } 11 #main_ad .carousel-inner .item img{ 12 width: 100%; 13 } 14 }
- js代碼
1 $(function() { 2 /** 3 * 根據屏幕寬度的變化決定輪播圖片應該展示什么 5 */ 6 function resize() { 7 // 獲取屏幕寬度 8 var windowWidth = $(window).width(); 9 // 判斷屏幕屬於大還是小 10 var isSmallScreen = windowWidth < 768; 11 // 根據大小為界面上的每一張輪播圖設置背景 13 $('#main_ad > .carousel-inner > .item').each(function(i, item) { 14 var $item = $(item); 15 // var imgSrc = $item.data(isSmallScreen ? 'image-xs' : 'image-lg'); 16 var imgSrc = 17 isSmallScreen ? $item.data('image-xs') : $item.data('image-lg'); 18 // 設置背景圖片 19 $item.css('backgroundImage', 'url("' + imgSrc + '")'); 20 // 21 // 因為我們需要小圖時 尺寸等比例變化,所以小圖時我們使用img方式 22 if (isSmallScreen) { 23 $item.html('<img src="' + imgSrc + '" alt="" />'); 24 } else { 25 $item.empty(); 26 } 27 }); 28 } 30 // // 讓window對象立即觸發一下resize,初始化div的背景圖 31 // $(window).trigger('resize'); 32 33 34 $(window).on('resize', resize).trigger('resize'); 35 });
在移動端手指觸摸輪播圖切換效果:
var carousels = $(".carousel"); //獲取所有的輪播圖 var startX,endX,finalMove; var diviation = 60; //讓手指滑動一定距離輪播圖才工作 carousels.on("touchstart",function(event) { // console.log(event.originalEvent.touches[0].pageX); startX = event.originalEvent.touches[0].pageX;//獲取手指接觸屏幕時的位置 }); carousels.on("touchmove",function(event) { // console.log(event.originalEvent.touches[0].pageX); endX = event.originalEvent.touches[0].pageX;//手指滑動時該值一直刷新,當手指離開時保留最后一次手指的位置 }) carousels.on("touchend",function(event) { //console.log(event.originalEvent.touches[0].pageX); finalMove = Math.abs(startX - endX) - diviation; if(finalMove > 0 && (startX - endX) > 0) {//如果手指滑動方向向左,輪播圖向右播放一張圖片 $(this).carousel('next); } else if (finalMove > 0 && (startX - endX) < 0) { $(this).carousel('prev'); } })
一些補充:
1. 為什么不一開始就用img標簽?
因為要讓圖片水平垂直居中,這樣更方便
2.bootstrap文檔地址:v3.bootcss.com
3.@media 可以針對不同的屏幕尺寸設置不同的樣式
4.超小屏幕 手機 (<768px) 小屏幕 平板 (≥768px)中等屏幕 桌 面顯示器 (≥992px)大屏幕 大桌面顯示器 (≥1200px)