js 基礎篇(點擊事件輪播圖的實現)

来源:http://www.cnblogs.com/jn1223/archive/2016/08/19/5788938.html
-Advertisement-
Play Games

輪播圖在以後的應用中還是比較常見的,不需要多少行代碼就能實現。但是在只掌握了js基礎知識的情況下,怎麼來用較少的而且邏輯又簡單的方法來實現呢?下麵來分析下幾種不同的做法: 1、利用位移的方法來實現 首先,我們可以在body中添加一個div並且將寬度設置成百分比(自適應頁面),比例具體是相對誰的百分比 ...


輪播圖在以後的應用中還是比較常見的,不需要多少行代碼就能實現。但是在只掌握了js基礎知識的情況下,怎麼來用較少的而且邏輯又簡單的方法來實現呢?下麵來分析下幾種不同的做法:

1、利用位移的方法來實現

  首先,我們可以在body中添加一個div並且將寬度設置成百分比(自適應頁面),比例具體是相對誰的百分比的話按需求來做,在這裡不多說。將圖片放入到div 中。

  其次,樣式部分將img標簽全部設置成absolute;以方便定位

  最後,js部分說說邏輯,定義兩個空數組,第一個數組用來保存初始的顯示在頁面的圖片和等待進入的圖片,第二個數組保存其餘的n張圖片,假設這兩個數組分別設置為:waitToShow=[]; 和 goOut=[];   waitToShow.shift();彈出第一張圖片假如命名為showFirst,併為showFirst圖片設置位移和移動時間,執行完成之後showFirst放入goOut尾部:goOut.push(showFirst);  這時waitToShow數組的第0個元素就變成原來的第二張要顯示的圖片,給這個圖片waitToShow[0]設置位移和移動時間,並且將goOut數組的首元素圖片彈出來,在放進waitToShow數組的尾部,保證waitToShow數組永遠是一張顯示的圖片和待顯示的圖片,這樣就通過兩個數組形成了一個迴圈來完成輪播圖的實現。反向的邏輯是一樣的(由於邏輯過於複雜這裡不推薦)

2、利用層級的高低來使最頂部圖片變化的做法(這個做法沒有位移的動作,但是邏輯卻非常簡便,很實用)

  直接來代碼更直觀點:基本每行都有註釋

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>輪播圖 (閃現 自適應)</title>
<style media="screen">
* {
margin: 0;
padding: 0;
}
.wrap {
width: 60%;
background: red;
margin: auto;
position: relative;
}
.wrap img {
width: 100%;
position: absolute;
/*z-index: 10;*/
}
input {
border: 1px solid lightgray;
width: 50px;
height: 30px;
background: red;
border-radius: 5px;
font-size: 20px;
}
</style>
</head>
<body>
<div class="wrap">
<img src="img/01.jpg" alt="" />
<img src="img/02.jpg" alt="" />
<img src="img/03.jpg" alt="" />
<img src="img/04.jpg" alt="" />
</div>
<input type="button" id="butLeft" name="name" value="◀︎">
<input type="button" id="butRight" name="name" value="▶︎">
</body>
<script type="text/javascript">
// 獲取images元素生成字元串數組,字元串數組不能進行push pop splice 等操作
// 所以要將它的值重新存放進一個數組中,後面有定義
var images = document.getElementsByTagName('img');
var butLeft = document.getElementById('butLeft');
var butRight = document.getElementById('butRight');
//獲取變數index 用來為後面設置層級用
var index = 1000;
// 獲取一個空的數組,用來存放images裡面的字元串元素
var imagess = [];

// for迴圈用來給imagess數組賦值,並且改變數組中的元素的層級
for (var i = 0; i < images.length; i++) {
imagess[i] = images[i];
var currentImage = imagess[i];
// 當前圖片的層級的設置,一輪for迴圈都為他們設置了初始的zIndex,圖片越靠前,層級設置
// 要求越高,所以用的是-i,這樣圖片會按順序從第一張,第二張.....依次向下
currentImage.style.zIndex = -i;
}

// 設置計數器count,執行一次點擊事件(向左或者向右)count加1
var count = 0;
// 向左的點擊事件
butLeft.onclick = function() {
// 從數組頭部彈出一個圖片元素
var showFirst = imagess.shift();
// 給彈出的這個圖片元素設置層級,即 -1000+count,
// 讓層級相較其他元素是最小的,數組頭部彈出的圖片會顯示在最底層
showFirst.style.zIndex = - index + count;
// 層級改變完成後再將他push進數組的尾部
imagess.push(showFirst);
// 點擊一次加1,不用考慮具體的值,只需要有點擊事件加 1
count++;
}
// 向右點擊事件
butRight.onclick = function() {
// 從imagess的尾部彈出一個元素,並賦值給showFirst
var showFirst = imagess.pop();
// 設置showFirst的層級為最大,1000+count ,這樣他會顯示在第一層
showFirst.style.zIndex = index + count;
// 層級改變之後將他在插入數組imagess的頭部
imagess.unshift(showFirst);
// 點擊一次加1
count++;
}
</script>
</html>

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在這裡: http://tech.meituan.com/java-memory-reordering.html 指令重排和記憶體可見性(緩存不一致)是兩個不同的問題。 volatile關鍵字太強,即阻擋指令重排,又保證記憶體一致性。 unsafe.putOrderedXXX()只阻擋指令重排,不保證內 ...
  • 面向對象是一種編程思想,和具體語言無關.c,java,JavaScript,php都可以進行帶有自己風格的面向對象的開發. 類是對一類事物都有的屬性和行為的封裝,為什麼需要類?首先我們要想想如果沒有類會怎麼樣?如果沒有類,假設現在我們要表示一輛普通的自行車,我們會想輪子數量2個,價格多少…然後我們又 ...
  • 原文來自:http://zhengdl126.iteye.com/blog/419850 第1章 引言 隨著互聯網應用的廣泛普及,海量數據的存儲和訪問成為了系統設計的瓶頸問題。對於一個大型的 互聯網應用,每天幾十億的PV無疑對資料庫造成了相當高的負載。對於系統的穩定性和擴展性造成了極大的問題。通過數 ...
  • 本視頻為activiti工作流的web流程設計器整合視頻教程 整合Acitiviti線上流程設計器(Activiti-Modeler 5.21.0 官方流程設計器) 本視頻共講了兩種整合方式 1. 流程設計器和其它工作流項目分開部署的方式 2. 流程設計器和SSM框架項目整合在一起的方式 視頻大小 ...
  • 先從web session的共用說起 許多系統需要提供7*24小時服務,這類系統肯定需要考慮災備問題,單台伺服器如果宕機可能無法立馬恢復使用,這必定影響到服務。這個問題對於系統規模來說,從小到大可能面臨的難度會相差很大。但對於原理來說其實就是需要準備備份系統隨時可以替代正在服務的系統,也就是無論何時 ...
  • scjp test( 線上測試網站):http://scjptest.com/mock-test.xhtml 《SCJP Sun® Certified Programmer for Java™ 6 Study Guide》(Exam 310-065) PDF Java技能回答網站: 無論你遇到什麼樣... ...
  • 0.前提條件 環境兩台ubuntu版本14.04 64位系統(並獲取root許可權) 假設兩台伺服器ip為:172.16.34.214(master),172.16.34.215(backup),keepalived的虛擬ip為172.16.34.216 兩台ubuntu系統上裝好docker,版本如 ...
  • 1、框模型:盒模型,①對象實際寬度=左右外邊距+左右邊框+左右內邊距 + width;②對象實際高度=上下外邊距+上下邊框+上下內邊距 + height; 2、外邊距:margin:取值:①top(上) right(右) bottom(下) left(左);②value:一個值,四個方向相同;③to ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...