1. 程式人生 > 程式設計 >jQuery實現視訊展示效果

jQuery實現視訊展示效果

本文例項為大家分享了jQuery實現視訊展示的具體程式碼,供大家參考,具體內容如下

效果:

使用者可以單擊左上角的左右箭頭,來控制視訊展示的左右滾動。當單擊向右箭頭時,下面的展示視訊會向左滾動,同時新的視訊展示會以滾動方式顯示出來。

jQuery實現視訊展示效果

思路:

  • 當視訊展示內容處於最後一個版面時,如果再向後,則應該跳轉到第一個版面
  • 當視訊展示內容處於第一個版面時,如果再向前,就應該跳轉到最後一個版面
  • 左上角的箭頭旁邊的藍色圓點與動畫一起切換,它代表當前所處的版面

一、HTML結構

<div class="v_show">
 <div class="v_caption">
  <h2 class="cartoon" title="卡通動漫">卡通動漫</h2>
  <div class="highlight_tip">
   <span class="current">1</span><span>2</span><span>3</span><span>4</span>
  </div>
  <div class="change_btn">
   <span class="prev" >上一頁</span>
   <span class="next">下一頁</span>
  </div>
  <em><a href="#" >更多>></a></em>
 </div>
 <div class="v_content">
  <div class="v_content_list">
   <ul>
    <li><a href="#" ><img src="img/01.jpg" alt="海賊王" /></a><h4><a href="#" >海賊王</a></h4><span>播放:<em>28,276</em></span></li>
    <!--中間省略-->
    <li><a href="#" ><img src="img/04.jpg" alt="龍珠" /></a><h4><a href="#" >龍珠</a></h4><span>播放 <em>57,865</em></span></li>
    </ul>
  </div>
 </div>
</div>

二、jQuery

(1)首先通過jQuery選擇器獲取向右的箭頭的元素,然後為它繫結click事件。因為“向右箭頭”和“視訊展示區域”在同一個祖先元素下,所以可以通過“向右箭頭”來找到“視訊展示區域”。首先獲取向右箭頭“的祖先元素,然後再祖先元素下尋找”視訊展示區域“。jQuery程式碼如下

$("span.next").click(function(){ //繫結click事件
   var $parent = $(this).parents("div.v_show");//根據當前點選元素獲取到父元素
   var $v_show = $parent.find("div.v_content_list"); //尋找到“視訊內容展示區域”
   var $v_content = $parent.find("div.v_content"); //尋找到“視訊內容展示區域”外圍的DIV元素
})

找到相應的元素後,就可以給相應的元素新增動畫效果了,可以通過animate()方法控制”視訊展示區域“的left樣式屬性的值來達到動畫效果。left的值就等於每個版面的寬度

可以用width()方法來獲取每個版面的寬度

var v_width = $v_content.width();

完成這一步之後,此時的程式碼如下:

$(function() {
 $("span.next").click(function() {
  var $parent = $(this).parents("div.v_show");
  var $v_show = $parent.find("div.v_content_list"); //找到視屏內容展示區域
  var $v_content = $parent.find('div.v_content'); //找到視訊展示區域的外圍div
  var v_width = $v_content.width(); //獲取區域內容的寬度,帶單位

  if (當動畫到最後一版面) {
   $v_show.animate({left:'0px'},"slow");
  } else {
   $v_show.animate({left:'-='+v_width},"slow");
  }
 });
});

(2)現在的問題是如何知道動畫已經到達最後一版面?”視訊展示區域“每個版面擺放了4張視訊圖片,如果能夠獲取到視訊圖片的總數,然後用總數除以4就可以得到總的版面數。在還沒有到達最後一個版面之前,需要在當前版面數的基礎上加1,當到達最後一個版面時(即當前的版面數等於總的版面數),則需要當前的版面數設定為1,使之重新開始動畫。

$(function() {
 var page = 1; //初始化當前版面數,即第一個版面
 var i = 4;
 $("span.next").click(function() {
  var $parent = $(this).parents("div.v_show");
  var $v_show = $parent.find("div.v_content_list"); //找到視屏內容展示區域
  var $v_content = $parent.find('div.v_content'); //找到視訊展示區域的外圍div
  var v_width = $v_content.width(); //獲取區域內容的寬度,帶單位
  var len = $v_show.find('li').length; //總的圖片數
  var page_count = Math.ceil(len / i); //只要不是整數,就往大的方向取最小的整數
  if (page==page_count) {
   $v_show.animate({left:'0px'},"slow");
  }
 });
});

(3)這一步完成,還需要是左上角的箭頭旁邊的藍色圓點跟隨動畫一起切換,來標識當前所處的版面。只需要把樣式”current”新增到代表當前版面的“藍色圓點”上就可以

如果想知道當前的版面數,方法很簡單,變數page的值就是版面數。由於eq()是方法的下標是從0開始,因此只要把page減去1就可得到當前的版面數,然後使用下面的程式碼來表示當前版面:

$parent.find("span").eq((page-1)).addClass("current").siblings().removeClass("current");

(4)運行當前程式碼,並沒有發現任何問題,但是如果快速地單擊“向右”按鈕,就會出現問題:放開游標,圖片還在滾動。
這裡的問題是有動畫佇列引起的。當快速地單擊向右按鈕時,單擊產生的動畫會追加到動畫佇列中,從而出現上述問題,解決如下:

if( !$v_show.is(":animated") ){ } //判斷“視訊內容展示區域”是否正在處於動畫

最終的jQquery程式碼如下

$(function(){
 var page = 1;
 var i = 4; //每版放4個圖片
 //向後 按鈕
 $("span.next").click(function(){ //繫結click事件
   var $parent = $(this).parents("div.v_show");//根據當前點選元素獲取到父元素
   var $v_show = $parent.find("div.v_content_list"); //尋找到“視訊內容展示區域”
   var $v_content = $parent.find("div.v_content"); //尋找到“視訊內容展示區域”外圍的DIV元素
   var v_width = $v_content.width() ;
   var len = $v_show.find("li").length;
   var page_count = Math.ceil(len / i) ; //只要不是整數,就往大的方向取最小的整數
   if( !$v_show.is(":animated") ){ //判斷“視訊內容展示區域”是否正在處於動畫
    if( page == page_count ){ //已經到最後一個版面了,如果再向後,必須跳轉到第一個版面。
    $v_show.animate({ left : '0px'},"slow"); //通過改變left值,跳轉到第一個版面
    page = 1;
    }else{
    $v_show.animate({ left : '-='+v_width },"slow"); //通過改變left值,達到每次換一個版面
    page++;
    }
   }
   $parent.find("span").eq((page-1)).addClass("current").siblings().removeClass("current");
 });
 //往前 按鈕
 $("span.prev").click(function(){
   var $parent = $(this).parents("div.v_show");//根據當前點選元素獲取到父元素
   var $v_show = $parent.find("div.v_content_list"); //尋找到“視訊內容展示區域”
   var $v_content = $parent.find("div.v_content"); //尋找到“視訊內容展示區域”外圍的DIV元素
   var v_width = $v_content.width();
   var len = $v_show.find("li").length;
   var page_count = Math.ceil(len / i) ; //只要不是整數,就往大的方向取最小的整數
   if( !$v_show.is(":animated") ){ //判斷“視訊內容展示區域”是否正在處於動畫
    if( page == 1 ){ //已經到第一個版面了,如果再向前,必須跳轉到最後一個版面。
    $v_show.animate({ left : '-='+v_width*(page_count-1) },"slow");
    page = page_count;
   }else{
    $v_show.animate({ left : '+='+v_width },"slow");
    page--;
   }
  }
  $parent.find("span").eq((page-1)).addClass("current").siblings().removeClass("current");
 });
});

完整程式碼下載地址:jQuery視訊展示

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。