前言
html5中提供audio標籤, 該標籤實現音訊的播放,之前就一直對於音訊以及視訊播放比較感興趣,一直想要自己實現一個音訊和視訊播放的模組,這也是本文章撰寫的初衷,最近花了些時間實現了Audio播放控制條,從這個小的模組實現也學習到了以前沒有接觸到的知識。
Audio實現想法
瀏覽器原生提供的audio的樣式比較簡單而且不是太好看,原生提供的樣式如下:
自實現的音樂播放控制條, 如何讓音樂播放控制條在js實現如下:
此音樂播放控制條實現的功能如下:
音樂播放(最基本的)
多首音樂的手動切換以及自動切換實現循環播放
#進度條點擊播放進度的改變
進度條拖曳播放進度的改變
音量點擊改變
音量拖曳改變
具體的實現如何讓音樂播放控制條在js實現:
下面就具體功能的實現具體展開,實現的音樂播放控制進度條主要是學習使用,沒有考慮兼容性,下面主要講解每個功能的實現思路:
整體
整個音樂播放的控制底層還是採用瀏覽器audio標籤來實現,調用audio api來實現整體的功能,下面是當前控制條的html結構:
<p class="audio"> <audio></audio> <p class="audio-controller"> <span class="audio-prev"></span> <span class="audio-state"></span> <span class="audio-next"></span> </p> <p class="audio-bar"> <span class="audio-time-current"></span> <p class="audio-progress"> <p> <p></p> <p></p> </p> </p> <span class="audio-time-duration"></span> </p> <p class="audio-volume"> <span class="audio-volume-icon"></span> <p class="audio-volume-adjust"> <p> <p></p> <p></p> </p> </p> </p></p>
audio-controller:是控製播放以及切換歌曲的區域
audio-bar:是時間以及歌曲進度的區域
audio-volume:是音量調節的區域
播放區域
該區域實現音樂的播放、暫停、切換(上一首、下一首),這部分其實沒有什麼需要講解的,其實就是audio api中play()、pause()來實現播放與暫停的,歌曲的切換就是陣列元素的改變,修改src位址而已。
進度區域
該區域是整個模組中核心的部分,該區域主要的功能點是:
-
進度如何讓音樂播放控制條在js實現實現
滑動如何讓音樂播放控制條在js實現實現
首先進度實現,想法是:
進度條有兩個p構成:
// 最外层作为如何讓音樂播放控制條在js實現暗的长度区域<p> // 最内层是实际表示进度 <p></p> </p>
#當點擊進度條,取得滑鼠點選該點的相對於最近的父類別元素的x軸方向的偏移量
偏移量就是內層p的實際寬度,設定背景色
滑桿的位置是設定left的值,但是left的值是:偏移量-滑桿寬度/2
滑動的實現,在這個模組中編寫中沒有採用html5中的拖放api,而是採用mousedown、mousemove、mouseup來實現的,具體實作程式碼:
// 滑动如何讓音樂播放控制條在js實現 bar.addEventListener('mousedown', function(e) { e.stopPropagation(); // 获取滑块被选择时相对文档的初始X轴值 options.clientX = e.clientX; // 偏移量 options.left = this.offsetLeft; options.max = bgNode.offsetWidth - this.offsetWidth / 2; options.isDrag = true; }); document.addEventListener('mousemove', function(e) { e.stopPropagation(); if (options.isDrag) { let currentClientX = e.clientX, left = options.left, max = options.max, initClientX = options.clientX, barHalfWidth = bar.offsetWidth / 2, fgWidth = 0, // 设置要滑动到的位置点(x轴方向偏移量) to = Math.max(0, Math.min(max, left + (currentClientX - initClientX))); bar.style.left = to + 'px'; if (to > barHalfWidth) { fgWidth = to + barHalfWidth; } fgNode.style.width = Math.max(0, fgWidth) + 'px'; options.offsetX = Math.max(0, fgWidth); } }); bgNode.parentNode.addEventListener('mouseup', function(e) { e.stopPropagation(); if (options.isDrag) { // 绘制此时的进度 tools.timeUpdateOrVolumeUpdate(options.offsetX, type); options.isDrag = false; } });
簡單來說就是:
mousemove時取得當前滑鼠在文件中的X軸方向位置- 初始位置+ 元素最初的偏移量,動態改變left的值來實現的
進度實際上是p的寬度來顯示的,動態的改變width的值以及滑桿的left值來實現進度如何讓音樂播放控制條在js實現
這裡要注意的是:
噹進度條總寬度與音訊總時間之間的比例關係,從而計算不同音訊時間點對應的進度的長度,這是基礎
#實際上這也非常好計算:
:width / duration
指定時間的寬度:(width / duration) * currentTime
音量調整的實作與進度相似,主要是改變volume的實作。
下面就說說該模組中存在的問題:
滑桿如何讓音樂播放控制條在js實現有時不夠自然順暢
音訊文件時間的處理不夠好
開始時進度部分不是太好
#程式碼會上傳到我的Github,模組日後還需要進行改進。
#以上是如何讓音樂播放控制條在js實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Atom編輯器mac版下載
最受歡迎的的開源編輯器

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)