bootstrap實現天平效果

之前提到了,最近,孩子的幼兒園讓家長體驗“半日助教活動”,每個家長需要講授15-20分鐘的課程。作為一名程序員,實在沒有能教的課程,只能做了一個小游戲,帶著小朋友們熟悉數字。

在上一章博客中,筆者發布了九宮格中貓捉老鼠的小游戲源碼,下面再把通過bootstrap實現天平效果的源碼發布,供讀者參考。

效果大致是這樣的。通過前端代碼生成一個簡易的天平,天平兩邊分別隨機生成一個數字,點擊較大的數字天平就會傾斜。

天平兩邊生成隨機數的截圖:

點擊較大數字天平傾斜的截圖:

廢話不多說,直接上源碼。

html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><!-- 引入bootstrap --><link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css"> <link rel="stylesheet" href="./css/d2g.css"><title>蹺蹺板比大小</title>
</head>
<body><div id="imgInfo">蹺蹺板比大小</div><!-- 蹺蹺板 --><div class="jenga-container"><div class="jenga-block" id="block1"></div><div class="line" id="line"></div><div class="sjx" id="sjx"></div><div class="jenga-block" id="block2"></div></div>
</body>
<!-- 引入js文件 -->
<script src="./js/d2g.js"></script>
</html>

html代碼沒什么好說的,就是兩個方塊兒,中間用橫線連接,橫線下面再放一個三角形作為支點。

css:

#imgInfo{width: 100%;margin-top: 20px;text-align: center;color: blue;
}
#line {height: 2px; /* 設置為最大高度 */background-color: #000;position: absolute;transform-origin: top; transition: transform 0.8s ease-out;
}
#sjx {width: 100px;height: 100px; /* 設置為最大高度 */background-image: url('../img/sjx1.jpg'); /* 設置背景圖片 */background-size: cover; /* 背景圖片覆蓋整個div區域 */background-position: center; /* 背景圖片居中 */position: absolute;transition: transform 0.8s ease-out;
}
.jenga-container {display: flex;justify-content: space-around;align-items: flex-end;
}.jenga-block {background-color: yellowgreen;margin: 2px 0;text-align: center;transform: translateX(0);transition: transform 0.8s ease-out;
}

css中通過transition屬性設置了天平橫線、方塊兒、三角形的傾斜效果。

js:

window.onload = function(xh){// 獲取視口寬度const viewportWidth = window.innerWidth// 獲取視口高度const viewportHeight = window.innerHeightvar imgInfo = document.querySelector('#imgInfo')var line = document.querySelector('#line')var sjx = document.querySelector('#sjx')var block1 = document.querySelector('#block1')var block2 = document.querySelector('#block2')var jengacontainer = document.getElementsByClassName('jenga-container')//為每個容器設置heightfor(var i=0;i<jengacontainer.length;i++){jengacontainer[i].style.height = viewportHeight*0.34+'px'}var jengablock = document.getElementsByClassName('jenga-block')//為每個容器設置heightfor(var i=0;i<jengablock.length;i++){jengablock[i].style.height = viewportHeight*0.24+'px'jengablock[i].style.width = viewportWidth*0.15+'px'jengablock[i].style.fontSize = viewportHeight*0.17+'px'}imgInfo.style.height = viewportHeight*0.12+'px'imgInfo.style.fontSize = viewportHeight*0.06+'px'line.style.width = viewportWidth*0.35+'px'line.style.top = (viewportHeight-viewportHeight*0.63)+'px'sjx.style.top = (viewportHeight-viewportHeight*0.63+2)+'px'sjx.style.width = viewportWidth*0.08+'px'sjx.style.height = viewportWidth*0.08+'px'let szqz1 = Math.floor(Math.random() * 10);block1.innerHTML = szqz1;let szqz2 = getRandomNumber(szqz1)block2.innerHTML = szqz2;/*** 點擊三角形重置數字*/sjx.onclick = function(){var audio1 = new Audio('./audio/py2.MP3');// 播放音頻audio1.play();}/*** 播放音頻*/if(xh!=2){//開始配音var audio = new Audio('./audio/py8.MP3');// 播放音頻audio.play();}/*** block2里面的數字大*/block2.onclick = function(){const y =  viewportHeight*0.3block2.style.transform = 'translateY('+y+'px)';//線變斜const y2 =  viewportHeight*0.12const radians = Math.atan2(y, viewportWidth*0.35);// 將弧度轉換為角度const degrees = radians * (180 / Math.PI);const a = viewportWidth*0.35const b = viewportHeight*0.3const c= Math.sqrt(a*a + b*b)line.style.width = c+'px';line.style.transform = 'translateY('+y2+'px) rotate('+degrees+'deg)';sjx.style.transform = 'translateY('+(y/2+4)+'px)';//播放音頻var audio = new Audio('./audio/py11.MP3');// 播放音頻audio.play();}/*** block1里面的數字大*/block1.onclick = function(){const y =  viewportHeight*0.3block1.style.transform = 'translateY('+y+'px)';//線變斜const y2 =  viewportHeight*0.12const radians = Math.atan2(y, viewportWidth*0.35);// 將弧度轉換為角度const degrees = radians * (180 / Math.PI);const a = viewportWidth*0.35const b = viewportHeight*0.3const c= Math.sqrt(a*a + b*b)line.style.width = c+'px';line.style.transform = 'translateY('+y2+'px) rotate('+(-degrees)+'deg)';sjx.style.transform = 'translateY('+(y/2+4)+'px)';//播放音頻var audio = new Audio('./audio/py11.MP3');// 播放音頻audio.play();}
}
function getRandomNumber(exclude) {let num;do {num = Math.floor(Math.random() * 10);} while (num === exclude);return num;
}

js中需要注意一下,這里有個小小的算法,因為在數字大的方塊兒下移的時候,中間的天平橫線長度也要跟著變,不然無法連接到兩端。所以,要通過勾股定理計算出天平橫線的長度、傾斜角度和中間三角形下降的距離。在block1/block2.onclick函數中可以看到這個小小的算法。

筆者這里只是實現了很簡單的效果,但大概原理是對的。各位讀者可以自行試試~~~~

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

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

相關文章

【讀書】讀書筆記——理科生的視角:底層邏輯+數學之美

1&#xff0c;底層邏輯1&#xff08;看清這個世界的底牌&#xff09; 劉潤 著 0&#xff09;什么是底層邏輯&#xff1f; 底層邏輯是&#xff1a;事物之間共同點、變化背后不變的東西事&#xff1b;看清事物的本質&#xff0c;才能在復雜變化中從根本上解決問題。 1&#x…

【Java繼承】(超級詳細!!!)

【Java繼承】&#xff08;超級詳細&#xff01;&#xff01;&#xff01;&#xff09; 1、 繼承的概念2 、繼承的語法3、 父類成員訪問3.1 子類中訪問父類的成員變量3.2 子類中訪問父類的成員方法 4、 super關鍵字5 、子類的構造方法6、 繼承關系上的執行順序7、protected 關鍵…

ubuntu20.04安裝后配置:wifi、屏幕亮度、Nvidia驅動等

文章目錄 一、安裝時最好用英語&#xff0c;否則Downloads等home下文件夾是中文二、安裝后開機無法進入系統圖形界面三、清理不必要軟件&#xff0c;更新系統四、屏幕亮度、Nvidia驅動五、wifi 一、安裝時最好用英語&#xff0c;否則Downloads等home下文件夾是中文 安裝完再在…

error: ‘address‘ in ‘class school‘ does not name a type school:: address = “

錯誤代碼 class school{ public:string name;static string address; public:static string getAddress(){return address;} };school::address "南京路";原因 school::address “南京路”;前面未加類型&#xff0c;導致編譯錯誤 解決 class school{ public:stri…

選項卡式小部件QTabWidget

文章目錄 1. 詳細介紹2. 常用屬性3. 信號4. 常用函數5. 官方示例Tab Dialog QTabWidget提供一堆選項卡式小部件。 1. 詳細介紹 選項卡式部件提供一個選項卡欄和一個用于顯示與每個選項卡相關的頁面的頁面區域。 默認情況下&#xff0c;選項卡欄顯示在頁面區域上方&#xff0c;…

Vue.js - 計算屬性與偵聽器 【0基礎向 Vue 基礎學習】

文章目錄 計算屬性 computedcomputed 的使用方法computed 與 method 的區別計算屬性完整寫法 watch 偵聽器&#xff08;監視器&#xff09;簡單寫法 → 簡單類型數據&#xff0c;直接監視完整寫法 → 添加額外配置項 計算屬性 computed computed 的使用方法 **概念&#xff1…

web題解,基礎知識鞏固(qsnctf)

1.文章管理系統 1&#xff09;打開題目&#xff0c;把它頁面翻完了&#xff0c;沒看懂它有啥用 2&#xff09;看了看源碼&#xff0c;也是一樣的&#xff0c;沒找到有用的東西 3&#xff09;想著可能還是在隱藏文件里找&#xff0c;那我就直接用dirsearch掃掃看 4&#xff09;…

初識C++ · 模擬實現vector

目錄 前言&#xff1a; 1 部分簡單函數的實現 2 push_back和pop_back 3 reserve和resize 4 Print_vector 5 insert和erase 6 拷貝構造 7 構造 8 賦值 9 memcpy的問題 10 迭代器失效 前言&#xff1a; 繼上文模擬實現了string之后&#xff0c;接著就模擬實現vector&…

DataFrame—數據匯總9

s3.sort_index() 文章最前&#xff1a; 我是Octopus&#xff0c;這個名字來源于我的中文名--章魚&#xff1b;我熱愛編程、熱愛算法、熱愛開源。所有源碼在我的個人github &#xff1b;這博客是記錄我學習的點點滴滴&#xff0c;如果您對 Python、Java、AI、算法有興趣&#xf…

MyBatis復習筆記

3.Mybatis復習 3.1 xml配置 properties&#xff1a;加載配置文件 settings&#xff1a;設置駝峰映射 <settings><setting name"mapUnderscoreToCamelCase" value"true"/> </settings>typeAliases&#xff1a;類型別名設置 #這樣在映射…

如何去除視頻上的文字?免費無痕去水印分享!視頻制作良器!

對于需要進行二次創作的視頻素材&#xff0c;去除原有的文字可以提供一個更加干凈的畫布&#xff0c;方便創作者在其基礎上進行新的創作和編輯。同時&#xff0c;去除文字后的視頻也更方便分享到各種平臺&#xff0c;避免因為平臺對文字的限制而導致視頻無法發布或傳播。 要去除…

Kotlin 標準函數 with、run、apply 的定義和使用

Kotlin 標準函數 with、run、apply 的定義和使用 1. with 函數 定義&#xff1a; with 函數允許你在一個對象的上下文中執行一個 lambda 表達式&#xff0c;而不需要在 lambda 表達式中重復引用該對象。 kotlin.internal.InlineOnly public inline fun <T, R> with(r…

云計算期末復習(1)

云計算基礎 作業&#xff08;問答題&#xff09; &#xff08;1&#xff09;總結云計算的特點。 透明的云端計算服務 “無限”多的計算資源&#xff0c;提供強大的計算能力 按需分配&#xff0c;彈性伸縮&#xff0c;取用方便&#xff0c;成本低廉資源共享&#xff0c;降低企…

python 3.10 install on centos

CentOS 7 安裝 Python 3.10_yum python3.10-CSDN博客

Homebrew安裝mysql之后,啟動和使用MySQL服務:

啟動MySQL服務&#xff1a; brew services start mysql 手動啟動服務&#xff1a; mysql.server start 例如&#xff1a; mysql.server start Starting MySQL .. SUCCESS! 停止 MySQL服務&#xff1a; brew services stop mysql 或者 mysql.server stop 重啟MySQL服務&a…

IDEA使用Maven打包項目的所有的依賴

要使用 Maven 命令將 Spring Boot 項目的依賴打包到 lib 文件夾中&#xff0c;你可以在終端中運行以下命令&#xff1a; mvn dependency:copy-dependencies -DoutputDirectory./lib這個命令會將項目的所有依賴&#xff08;包括運行時依賴&#xff09;復制到當前目錄的 lib 文件…

Windows操作系統基本知識整理

目錄 引言 一、Windows操作系統的發展歷史 1.1 Windows 1.0到Windows 3.0 1.2 Windows 95到Windows Me 1.3 Windows NT到Windows 2000 1.4 Windows XP到Windows 7 1.5 Windows 8到Windows 10 二、Windows操作系統的核心組件 2.1 內核 2.2 文件系統 2.3 圖形用戶界面&…

內網橫向移動小補充 --->PTK

大家別急&#xff0c;我的基于資源的約束性委派攻擊還在寫&#xff0c;這個東西一時半會講不清楚&#xff0c;所以我在這里先來補充一點橫向移動以前沒說好的東西&#xff01;&#xff01;&#xff01; 在更啦&#xff0c;別催啦~~~~ 還記得我之前在內網滲透里面講過這個PTK&a…

亞馬遜云主管馬特·加爾曼面臨壓力,致力于在人工智能領域趕超競爭對手

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

mysql中連接查詢的成本

大家好。上篇文章我們講了mysql中成本的含義以及單表查詢如何計算成本。現在我們接著講講mysql中連接查詢的成本。 在講之前&#xff0c;我們先創建兩張一樣的表single_table和single_table2&#xff0c;并在表中插入10000條數據。在下面的講解中&#xff0c;我們稱single_tab…