前端:HTML+CSS+JavaScript實現輪播圖2

前端:HTML+CSS+JavaScript實現輪播圖2

        • 1. 和之前版本的區別
        • 2. 實現原理
        • 3. 針對上述的改進
        • 3. 參考代碼

1. 和之前版本的區別

之前發布的那篇關于輪播圖的文章在這:前端:HTML+CSS+JavaScript實現輪播圖,只能說存在問題吧!比如2、3實現效果是用了兩個定時器實現的,雖然也達到了那種效果,但是從一些方面來說總有點繁瑣吧!比如,在一定時間內圖片移動像素的計算等。現在這個不需要計算,直接用一個定時器即可實現,我想說現在這個版本和各位在瀏覽器上看到那種效果實現原理應該差不多。

請添加圖片描述
雖然沒有給出相應的點擊事件哈!

2. 實現原理

利用相對定位relative絕對定位absolute定時器transition
結合relative、absolute來進行圖片布局,用定時器來實現圖片輪播間隔效果,用transition來實現每張圖片移動過渡效果。
在這里插入圖片描述
初始實現效果如上,這不符合我們想要的那種效果,這種是通過定時器每隔幾秒變化每張圖片的left的值的效果。這并不怎么美觀,因為圖片過渡效果并不符合我們的要求,但是如果顯示的有多張圖片,那么倒還不錯,如下:
在這里插入圖片描述

3. 針對上述的改進

在這里插入圖片描述
就是把所有圖片從左到右進行排列,外層用一個標簽元素包裹,每隔一段時間變換外層的標簽元素的left屬性值。

3. 參考代碼

這個是需要改進的代碼哈!
main.html

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title></title><link rel="stylesheet" href="./main.css">
</head>
<body><div class="main"></div>
</body>
<script type="text/javascript" src="main.js"></script>
</html>

main.css

*{padding: 0;margin: 0;
}ul{list-style: none;
}.main{width: 500px;height: 300px;margin: 0 auto;position: relative;
}.dot{height: 10px;position: absolute;bottom: 20px;left: 50%;transform: translateX(-50%);
}.dot span{height: 100%;float: left;width: 10px;border-radius: 50%;margin-left: 10px;cursor: pointer;
}.dot span:first-child{margin-left: 0;
}.red{background-color: red;
}.white{background-color: white;
}.main ul{position: relative;height: 100%;width: 100%;overflow-x: hidden;
}.main ul li{position: absolute;top: 0;transition: all 0.3s;width: 100%;height: 100%;
}.main ul li img{width: 100%;
}

main.js

// 輸入圖片鏈接數組
const img_arr = ['https://i0.hdslb.com/bfs/banner/627984a9617a35c7e4366e0c74baf29ef3aa96ae.png@976w_550h_1c_!web-home-carousel-cover.avif','https://i0.hdslb.com/bfs/banner/3464f3b055107b2b54b9443e02c43448c0915866.png@976w_550h_1c_!web-home-carousel-cover.avif','https://i0.hdslb.com/bfs/banner/ff7d11c786ddd45c218696c3c6b19c69a71883d7.jpg@976w_550h_1c_!web-home-carousel-cover.avif','https://i0.hdslb.com/bfs/sycp/creative_img/202311/74214ce12c94ba104322e2be463ec6f7.jpg@976w_550h_1c_!web-home-carousel-cover.avif'
];const mainEle = document.querySelector('.main');
var _htmlStr = '';
img_arr.forEach(function(ele){_htmlStr += `<li><img src="${ele}"></li>`
})var _htmlStr2 = '';
for(let i=0;i<img_arr.length;i++){_htmlStr2 += '<span></span>'
}var _htmlStr2 = `<div class="dot">${_htmlStr2}</div>`;
_htmlStr = `<ul>${_htmlStr}</ul>${_htmlStr2}`;mainEle.innerHTML = _htmlStr;const img_width = 500;const elements = document.querySelectorAll('.main ul li');
const elements2 = document.querySelectorAll('.dot span');
elements.forEach(function(ele,index){ele.style.left = index * img_width + 'px';
})elements2.forEach(function(ele,index){if(index == 0){ele.className = 'red';}else{ele.className =  'white';}
})function left(){elements.forEach(function(ele,index){let left_v = parseFloat(ele.style.left);if(left_v - img_width < 0){ele.style.left = (elements.length - 1) * img_width + 'px';}else{ele.style.left = left_v - img_width + 'px';}if(left_v - img_width == 0){elements2[index].className = 'red';}else{elements2[index].className = 'white';}})
}var timer = setInterval(left,2000);

這個是改進版本
main.html

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title></title><link rel="stylesheet" href="./main.css">
</head>
<body><div class="main"><div class="pre_ul" id="main"><ul><li><img src="https://i1.hdslb.com/bfs/archive/da52b26129a84aa316383d53e596d3f89c708294.jpg@672w_378h_1c_!web-home-common-cover.avif" alt=""></li><li><img src="https://i0.hdslb.com/bfs/archive/6df10d7e0834f8511ea620dbfe6bfc7b1eabdab2.jpg@672w_378h_1c_!web-home-common-cover.avif" alt=""></li><li><img src="https://i0.hdslb.com/bfs/archive/47338bc6056b6bbc906155590c6e201ae5dffee8.jpg@672w_378h_1c_!web-home-common-cover.avif" alt=""></li></ul></div><div class="dot" id="main"><span class="red"></span><span class="white"></span><span class="white"></span></div></div>
</body>
<script type="text/javascript" src="main.js"></script>
</html>

main.css

*{margin: 0;padding: 0;
}ul{list-style: none;
}.main{width: 500px;height: 300px;position: relative;margin: 0 auto;overflow-x: hidden;
}.main .dot{position: absolute;bottom: 8%;left: 50%;transform: translateX(-50%);height: 12px;z-index: 2;
}.dot span{float: left;height: 100%;width: 12px;border-radius: 50%;cursor: pointer;margin-left: 8px;
}.dot span:first-child{margin-left: 0;
}.white{background-color: white;
}.red{background-color: red;
}.main .pre_ul{height: 100%;position: absolute;top: 0;left: 0;transition: all 0.5s;z-index: 1;
}.main .pre_ul ul{width: 100%;height: 100%;position: relative;overflow-x: hidden;
}.main .pre_ul ul li{height: 100%;position: absolute;top: 0;left: 0;
}.main .pre_ul ul li img{width: 100%;
}

main.js

const img_width = 500;
// 圖片最大寬度
const eles = document.querySelectorAll('.pre_ul ul li');
const pre_ul_ele = document.querySelector('.pre_ul');
const dots = document.querySelectorAll('.dot span');
const n = eles.length;
pre_ul_ele.style.left = 0;
pre_ul_ele.style.width = n * img_width + 'px';
eles.forEach(function(ele,index){ele.style.width = img_width + 'px';ele.style.left = index * img_width + 'px';
})function clear_red(){dots.forEach(function(ele,index){ele.className = 'white';})
}var start_index = 0;function left(){pre_ul_ele.style.transition = 'all 0.5s';let left_v = parseInt(pre_ul_ele.style.left);pre_ul_ele.style.left = left_v - 500 + 'px';clear_red();start_index = (start_index+1)%n;dots[start_index].className = 'red';if(left_v - 500 == -n*img_width){pre_ul_ele.style.left = 0;}
}var timer1 = setInterval(left,2000);

注:上述代碼沒有給出點擊按鈕變化圖片特效,想實現的讀者可以去看看上述第一個關于實現輪播圖的版本哈!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209090.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209090.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209090.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HuggingFace學習筆記--Prompt-Tuning、P-Tuning和Prefix-Tuning高效微調

1--Prompt-Tuning 1-1--Prompt-Tuning介紹 Prompt-Tuning 高效微調只會訓練新增的Prompt的表示層&#xff0c;模型的其余參數全部固定&#xff1b; 新增的 Prompt 內容可以分為 Hard Prompt 和 Soft Prompt 兩類&#xff1b; Soft prompt 通常指的是一種較為寬泛或模糊的提示&…

搭乘“低代碼”快車,引領食品行業數字化轉型全新升級

數字化技術作為重塑傳統行業重要的力量&#xff0c;正以不可逆轉的趨勢改變著企業經營與客戶消費的方式。 在近些年的企業數字化服務與交流過程中&#xff0c;織信團隊切實感受到大多數企業經營者們從懷疑到猶豫再到焦慮最終轉為堅定的態度轉變。 在這場數字化轉型的競賽中&a…

VS2009和VS2022的錯誤列表可復制粘貼為表格

在VS2019或VS2022中&#xff0c;可看到如下錯誤列表&#xff1a; 如果復制這兩行錯誤信息&#xff1a; 然后把它粘貼到word文件&#xff0c;就可以看到以下表格&#xff1a; 嚴重性 代碼 說明 項目 文件 行 禁止顯示狀態 錯誤(活動) E0020 未定義標識符 "dd"…

0基礎學java-day16-(坦克大戰[1])

一、 坦克大戰游戲演示 1 游戲演示 2.為什么寫這個項目 3.寫項目前的提醒 二、java 繪圖坐標體系 1 坐標體系-介紹 2 坐標體系-像素 3 介紹-快速入門 package com.hspedu.draw;import javax.swing.*; import java.awt.*;/*** author 林然* version 1.0* 演示如何在面板畫圓…

【python可視化系統源碼】基于爬蟲與可視化的電影推薦系統課題背景、目的、意義、研究思路、研究方法

該項目含有源碼、文檔、PPT、配套開發軟件、軟件安裝教程、項目發布教程等學習內容。 目錄 一、項目介紹&#xff1a; 二、文檔學習資料&#xff1a; 三、模塊截圖&#xff1a; 四、開發技術與運行環境&#xff1a; 五、代碼展示&#xff1a; 六、數據庫表截圖&#xff1a…

從簡單到入門,一文掌握jvm底層知識文集。

&#x1f3c6;作者簡介&#xff0c;普修羅雙戰士&#xff0c;一直追求不斷學習和成長&#xff0c;在技術的道路上持續探索和實踐。 &#x1f3c6;多年互聯網行業從業經驗&#xff0c;歷任核心研發工程師&#xff0c;項目技術負責人。 &#x1f389;歡迎 &#x1f44d;點贊?評論…

【Linux systemctl命令控制軟件的啟動和關閉】

文章目錄 Linux systemctl命令&#xff1a;控制軟件的啟動和關閉1. 查看服務狀態2. 啟動服務3. 停止服務4. 重啟服務5. 設置開機自啟6. 取消開機自啟7. 重新加載配置 Linux systemctl命令&#xff1a;控制軟件的啟動和關閉 1. 查看服務狀態 要查看系統上所有服務的狀態&#…

matlab RGB三元組和十六進制的轉換

matlab畫柱狀圖改顏色的時候&#xff0c;用三元組的形式&#xff0c;范圍是[0&#xff0c;1] 我們獲得了十六進制 到網站轉換為[0,255] https://c.runoob.com/front-end/55/ 然后將得到的值/255 輸入matlab就可以了

Bean作用域和生命周期

小王學習錄 前言Bean的作用域什么是Bean的作用域Bean的六種作用域1. 單例作用域 singleton2. 原型作用域 prototype (多例作用域)3. 請求作用域 request4. 會話作用域 session5. 全局作用域 application6. Http WebSocket作用域 websocket Spring的執行流程和Bean的生命周期Spr…

網頁設計--第6次課后作業

試用Vue相關指令完成對以下json數據的顯示。顯示效果如下&#xff1a; 其中&#xff1a;gender1 顯示為女&#xff0c;gender2顯示為男。價格超過30元&#xff0c;顯示“有點小貴”。價格少于等于30元&#xff0c;則顯示“價格親民”。 data: {books: [{"id": "…

springboot集成字典注解

又是想下班的一天 文章目錄 前言springboot使用AOP簡單集成字典注解 一、通過注解進行字典賦值二、使用步驟1.添加注解2.序列化處理類3.實體類添加注解4.json返回值 總結 前言 springboot使用AOP簡單集成字典注解 一、通過注解進行字典賦值 使用AOP切面實現字典的賦值,自動將…

MongoTemplate 常用查詢

MongoTemplate是Spring Data MongoDB提供的一個Java編程接口&#xff0c;用于操作MongoDB數據庫。它提供了一系列方法和功能&#xff0c;以便進行數據的插入、更新、刪除和查詢等操作。 使用MongoTemplate&#xff0c;你可以通過編寫Java代碼與MongoDB進行交互&#xff0c;而無…

二百一十四、Linux——Linux系統時間比電腦時間慢5分鐘

一、目的 服務器重啟后&#xff0c;發現Linux的系統時間比電腦時間慢5分鐘&#xff0c;于是看了些博客&#xff0c;終于找到了解決方法&#xff0c;記錄一下&#xff0c;以防止后面出現同樣的問題 二、問題 通過date查看&#xff0c;Linux系統時間比電腦時間慢5分鐘 &#…

IEEE RAS 機器人最優控制(Model-based Optimization for Robotics)學習資料

系列文章目錄 前言 電氣和電子工程師學會機器人模型優化技術委員會 一、學習資料 1.1 教程和暑期學校 2020 年 Memmo 歐盟項目暑期班2019年Memmo歐盟項目冬季學校Matthias Gerdts&#xff08;德國慕尼黑聯邦國防軍大學&#xff09;在拜羅伊特 OMPC 2013 上舉辦的最優控制教程…

詳解vue生命周期

vue2 生命周期 Vue.js是一個流行的JavaScript框架&#xff0c;它使用了一套生命周期鉤子函數來管理組件的創建、更新和銷毀過程。以下是Vue組件的生命周期鉤子函數&#xff1a; beforeCreate&#xff1a;在實例初始化之后&#xff0c;數據觀測 (data observer) 和 event/watch…

字節跳動ZNS SSD應用案例解析

一、ZNS SSD基本原理 ZNS SSD的原理是把namespace空間劃分多個zone空間&#xff0c;zone空間內部執行順序寫。這樣做的優勢&#xff1a; 降低SSD內部的寫放大&#xff0c;提升SSD的壽命 降低OP空間&#xff0c;host可以獲得更大的使用空間 降低SSD內部DRAM的容量&#xff0c;…

一款可無限擴展的軟件定時器開源框架項目代碼

摘自鏈接 時間片輪詢架構如何穩定高效實現&#xff0c;取代傳統的標志位判斷方式&#xff0c;更優雅更方便地管理程序的時間觸發操作。 可以在STM32單片機上運行。

基于SSM的社區管理系統

末尾獲取源碼 開發語言&#xff1a;Java Java開發工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 數據庫&#xff1a;MySQL5.7和Navicat管理工具結合 服務器&#xff1a;Tomcat8.5 開發軟件&#xff1a;IDEA / Eclipse 是否Maven項目&#xff1a;是 目錄…

LeetCode(52)最小棧【棧】【中等】

目錄 1.題目2.答案3.提交結果截圖 鏈接&#xff1a; 最小棧 1.題目 設計一個支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常數時間內檢索到最小元素的棧。 實現 MinStack 類: MinStack() 初始化堆棧對象。void push(int val) 將元素val推入堆棧。void…

區分工業設計軟件中CAD、CAE、CAM、PDM等概念

工業設計軟件是專門用于輔助工業設計師在產品設計和開發過程中進行各種任務的計算機程序。這些軟件提供了廣泛的工具和功能&#xff0c;幫助設計師創建、分析、修改和可視化產品的概念和詳細設計。 CAD 計算機輔助設計&#xff08;Computer-Aided Design&#xff0c;CAD&…