初踩坑JS載入與audio介面:點擊頭像開始/暫停背景音樂

来源:https://www.cnblogs.com/reashal/archive/2022/04/16/16151669.html
-Advertisement-
Play Games

##背景 封樓期間難得空閑,也靜不下心學習,空閑之餘萌生了重做引導單頁的想法。因為之前都是扒站(某大公司游戲官網)+小改,一來雖然很炫酷,但本人水平有限,仍有很大一部分JS無從下手,甚至是看不懂|-_-|;二來對方畢竟沒有開源,無論道德還是法律都說不過去,所以……先從簡單處寫起,後續慢慢迭代吧! # ...


背景

封樓期間難得空閑,也靜不下心學習,空閑之餘萌生了重做引導單頁的想法。因為之前都是扒站(某大公司游戲官網)+小改,一來雖然很炫酷,但本人水平有限,仍有很大一部分JS無從下手,甚至是看不懂|-_-|;二來對方畢竟沒有開源,無論道德還是法律都說不過去,所以……先從簡單處寫起,後續慢慢迭代吧!

大致佈局:Flex

參見 阮一峰Flex佈局教程

頭像部分

手殘黨,暫時沒有用CSS或者JS繪製特效,因為之前做頭像留著底圖,所以偷個懶。
CSS:滑鼠指針指向頭像切換gif,移開切換png。
JS:音樂播放切換gif,暫停切換png。

背景音樂部分

audio介面參見 HTML audio基礎API完全使用指南
我只迴圈播放了一首歌,所以隱藏audio主體美觀一些,然後控制按鈕交給頭像。有需要多首歌的,可以看一下開源的APlayer

遇到的問題:JS載入阻塞,獲取不到元素id

在實現頭像處滑鼠事件時,一直獲取不到頭像的id,但是控制台調試發現代碼無誤。原來由於JS的機制是單線程,所以先運行JS代碼,再構建相關DOM,需要在外部引用JS時加上屬性async,等構建完DOM再獲取。

<script src="./js/reashal.js" async="async"></script>

代碼部分

HTML部分

<!DOCTYPE html>
<html lang="chn">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport"
        content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no">
    <title>你聽|睿嶼青衫</title>
    <meta name="author" content="reashal">
    <meta name="description" content="不惦來路,輕裝且行">
    <link rel="stylesheet" href="./css/style.css">
    <link rel="shortcut icon" href="https://images.reashal.com/resources/avator/reashal.png">
    <link rel="stylesheet" href="https://cdn.staticfile.org/font-awesome/4.7.0/css/font-awesome.css">
    <script src="https://images.reashal.com/resources/js/music.js" async="async"></script>
</head>

<body>
    <div class="box">
        <div class="about" id="bor">
            <img src="https://images.reashal.com/resources/avator/reashal.png" id="ava" title="點我有驚喜哦" alt="頭像/音樂控制項">
            <div id="reashal">
                <h2><b>睿嶼青衫</h2>
                <p>不惦來路,輕裝且行</p>
                <div class="fgx"></div>
                <div class="icon">
                    <ul id="ctr">
                        <li><a href="https://www.reashal.com/" title="Home" target="blank"><i
                                    class="fa fa-paper-plane fa-lg"></i></a></li>
                        <li><a href="https://www.reashal.com/index.php/cross.html" title="Mood" target="blank"><i
                                    class="fa fa-pencil fa-lg"></i></a></li>
                        <li><a href="http://wpa.qq.com/msgrd?v=3&uin=532266666&site=ivrpano.com&menu=yes" title="QQ"
                                target="blank"><i class="fa fa-qq fa-lg"></i></a></li>
                        <li><a href="mailto:[email protected]" title="Mail" target="blank"><i
                                    class="fa fa-envelope fa-lg"></i></a>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
    </div>
    <div class="footer">
        <a target="_blank" href="https://beian.miit.gov.cn/">
            <p>魯ICP備18004237號</p>
        </a>
    </div>
    <div>
        <!--滑鼠點擊泡泡特效-->
        <canvas class="fireworks" style="position:fixed;left:0;top:0;z-index:99999999;pointer-events:none;"></canvas>
        <script type="text/javascript" src="https://images.reashal.com/resources/js/djtx.js"></script>
    </div>
    <div>
        <audio controls id="music" loop>
            <source src="https://images.reashal.com/resources/music/LettingGo.mp3" type="audio/mpeg">
        </audio>
    </div>

</body>

</html>

CSS部分

html,
body {
    height: 100%;
    width: 100%;
    margin: 0;
    padding: 0;
}

body {
    background-image: linear-gradient(to right, #ec6fa3, #2f4af2);
}

.box {
    position: fixed;
    height: 100%;
    width: 100%;
    /* box鋪滿屏幕,需要html和body取消邊距 */
    display: flex;
    align-items: center;
    justify-content: center;
    /* 盒子內部水平垂直居中對齊 */
}

.about {
    width: 70%;
    max-width: 750px;
    background-color: rgba(219, 245, 245, 0.1);
    padding: 1%;
}

#ava {
    display: block;
    width: 100px;
    height: 100px;
    border: 2px solid #1eccef;
    margin: auto;
    margin-top: 3%;
    border-radius: 100px;
}

#ava:hover {
    content: url("https://images.reashal.com/resources/avator/dyAva.gif");
}

#reashal {
    color: rgb(255, 255, 255);
    text-align: center;
    margin: auto;
}

.fgx {
    height: 1px;
    background-color: white;
}

ul,
li {
    display: inline-block;
    list-style: none;
    padding: 1vh;
    margin: auto;
}

i:hover {
    color: #ec6fa3;
}

.footer {
    bottom: 3%;
    width: 100%;
    position: fixed;
    text-align: center;
}

a,
p {
    color: white;
    font-size: 16px;
    text-decoration: none;
}

#music {
    display: none;
}

JS部分

音樂部分

var x = document.getElementById('ava');
// 單擊頭像開始/暫停背景音樂
var music = document.getElementById('music');
x.onclick = function () {
  if (music.paused) {
    music.play();
  }
  else {
    music.pause();
  }
}
//播放音樂旋轉頭像
music.onplay = function () {
  x.src = 'https://images.reashal.com/resources/avator/dyAva.gif';
  x.title = '點擊暫停背景音樂';
}
//暫停音樂停止旋轉頭像
music.onpause = function () {
  x.src = 'https://images.reashal.com/resources/avator/reashal.png';
  x.title = '點擊開啟背景音樂';
}

點擊特效部分

不貼了,想要的自己從我這裡下載,別人寫的我也看不懂……

暫時完工

後續 想起什麼 學會點新東西再加
成品展示 以後慢慢 更新


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

-Advertisement-
Play Games
更多相關文章
  • 一、簡介 簡單解析一下gRPC,gRPC 是一個由Google開源的,跨語言的,高性能的遠程過程調用(RPC)框架。 特點: 跨語言 內容protobuf格式(比json體積小),網路傳輸快 使用HTTP/2進行傳輸 適合高性能輕量的微服務,一般對外的介面用restful api,內部服務的調用用g ...
  • ARM體繫結構與介面技術——ARM異常處理 異常的概念 處理器在正常執行程式的過程中可能會遇到一些不正常的事件發生,這時處理器就要將當前的程式暫停下來,轉而去處理這個異常的事件,異常事件處理完成之後再返回到被異常打斷的點繼續執行程式。 異常處理機制 不同的處理器對異常的處理的流程大體相似,但是不同的 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 ifconfig 命令可以用於查看、配置、啟用或禁用指定的網路介面,還可以用來配置網卡的IP地址、掩碼、廣播地址、網關等,功能很豐富 功能雖然豐富,但是如果你沒有安裝呢? 嘿嘿嘿 如果沒有安裝ifconfig管理命令的話,直接運行ifconfig ...
  • 1. 原因分析 出現這種情況的原因是 Windows 和 Ubuntu它們在預設情況下看待硬體時間(主板上的BOIS顯示的時間)的方式 不一樣。 我們先來瞭解一下關於時間的概念 : UTC,即Universal Time Coordinated, 協調世界時 GMT,即Greenwich Mean ...
  • 1. 問題描述 開關機,或者重啟時,等待時間很長,大約1分30秒,且有游標閃爍。 2. 問題解析 等待時間長,可能時由於開關機時後臺要打開或關閉某些程式,這些程式花費的時間是有系統設定的預設時間的,大約90秒,只有到了90秒系統才能打開或是關閉。 游標閃爍就是後臺一系列活動的簡化,它表示後臺有一系列 ...
  • 網上的OpenCV配置環境大部分都不能正常配置成功,不是編譯時報找不到so,就是運行找不到so.本文是我試了不少坑才找到的配置方法.其原理是讓AndroidStudio自己根據mk文件自動配置. 1.下載OpenCV 先去OpenCV官網下載OpenCV的Android版本.速度慢的可以用迅雷下載. ...
  • 原文地址:關於Android安裝apk出現解析包異常問題情況總結 | Stars-One的雜貨小窩 說之前,可以推薦下各位使用這個開源庫AndroidUtilCode,下麵提及到的工具類,都是在此庫中 以下說的解析包異常,是指進到安裝頁面就立馬出現了錯誤提示 而不是在可以正常進入安裝界面,然後點擊了 ...
  • OpenHarmony官方社群在4月14日晚上20:00,特別邀請了3位應用開發領域的技術大咖——張榮超、李寧、連志安,以《OpenHarmony 3.1 Release版本南北向關鍵能力解讀》為主題,與大家直播聊一聊OpenHarmony 3.1版本的那些事兒。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...