七夕特輯——3D愛心(可監聽鼠標移動)

前言

在這里插入圖片描述
「作者主頁」:雪碧有白泡泡
「個人網站」:雪碧的個人網站
「推薦專欄」

java一站式服務
React從入門到精通
前端炫酷代碼分享
★ 從0到英雄,vue成神之路★
uniapp-從構建到提升
從0到英雄,vue成神之路
解決算法,一個專欄就夠了
架構咱們從0說
★ 數據流通的精妙之道★
★后端進階之路★

請添加圖片描述

文章目錄

  • 前言
  • 先上效果
      • 點擊運行后即可有如下效果,拖動鼠標即可
    • 代碼
    • 鼠標監聽并縮小愛心大小
  • 再分享一個html愛心+彈幕效果
      • 效果如下

先上效果


在這里插入圖片描述
這里可以直接 看查源碼內容刷新,最后一個是 放大跳轉網頁

點擊運行后即可有如下效果,拖動鼠標即可

在這里插入圖片描述

代碼

要將這個愛心改為3D效果,需要進行以下幾個步驟:

  1. 創建一個可以旋轉的3D場景。
  2. 將愛心的圖案轉換成3D模型。
  3. 在場景中添加3D模型,并旋轉。
  4. 渲染場景,使其呈現出3D效果。

需要使用的工具和技術包括:HTML5 Canvas、Three.js(一個JavaScript庫用于創建和顯示3D圖形)和一些基本的3D數學知識。

實現了一個簡單的3D愛心效果:

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title>💗</title><style>html,body {height: 100%;padding: 0;margin: 0;background: #000;overflow: hidden;}#pinkboard {position: absolute;top: 0;left: 0;}</style></head><body><canvas id="pinkboard"></canvas><script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js"></script><script>function createHeart() {const heartShape = new THREE.Shape();const x = -2;const y = -1;heartShape.moveTo(x + 2.5, y + 2.5);heartShape.bezierCurveTo(x + 2.5, y + 2.5, x + 2, y, x, y);heartShape.bezierCurveTo(x - 3, y, x - 3, y + 3.5, x - 3, y + 3.5);heartShape.bezierCurveTo(x - 3,y + 5.5,x - 1.6,y + 7.7,x + 2.5,y + 9.5);heartShape.bezierCurveTo(x + 6.6,y + 7.7,x + 9,y + 4.5,x + 9,y + 3.5);heartShape.bezierCurveTo(x + 9, y + 3.5, x + 9, y, x + 6.5, y);heartShape.bezierCurveTo(x + 4, y, x + 2.5, y + 2.5, x + 2.5, y + 2.5);const geometry = new THREE.ShapeGeometry(heartShape);const material = new THREE.MeshBasicMaterial({ color: "#ea80b0" });const heart = new THREE.Mesh(geometry, material);heart.scale.set(10, 10, 10);return heart;}function createScene() {const scene = new THREE.Scene();const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000);camera.position.z = 50;const renderer = new THREE.WebGLRenderer({ canvas: pinkboard });renderer.setSize(window.innerWidth, window.innerHeight);const heart = createHeart();scene.add(heart);function animate() {requestAnimationFrame(animate);heart.rotation.x += 0.01;heart.rotation.y += 0.01;renderer.render(scene, camera);}animate();}createScene();</script></body>
</html>

在這個示例中,我們使用了Three.js來創建3D場景,并將愛心的圖案轉換成了一個簡單的3D模型。我們在場景中添加了這個模型,并在每一幀中旋轉它。最后使用renderer對象將場景渲染到Canvas上。

請注意,在上述代碼中,添加了一個新的Canvas元素<canvas id="pinkboard"></canvas>作為Three.js的渲染目標。

鼠標監聽并縮小愛心大小

要實現讓這個愛心隨著滑動轉動的效果,你可以通過監聽鼠標移動事件來改變愛心的旋轉角度:

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title>💗</title><style>html,body {height: 100%;padding: 0;margin: 0;background: #000;overflow: hidden;}#pinkboard {position: absolute;top: 0;left: 0;}</style></head><body><canvas id="pinkboard"></canvas><script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js"></script><script>let mouseX = 0;let mouseY = 0;document.addEventListener("mousemove", onDocumentMouseMove, false);function onDocumentMouseMove(event) {mouseX = (event.clientX - window.innerWidth / 2) / 10;mouseY = (event.clientY - window.innerHeight / 2) / 10;}function createHeart() {const heartShape = new THREE.Shape();const x = -2;const y = -1;heartShape.moveTo(x + 2.5, y + 2.5);heartShape.bezierCurveTo(x + 2.5, y + 2.5, x + 2, y, x, y);heartShape.bezierCurveTo(x - 3, y, x - 3, y + 3.5, x - 3, y + 3.5);heartShape.bezierCurveTo(x - 3,y + 5.5,x - 1.6,y + 7.7,x + 2.5,y + 9.5);heartShape.bezierCurveTo(x + 6.6,y + 7.7,x + 9,y + 4.5,x + 9,y + 3.5);heartShape.bezierCurveTo(x + 9, y + 3.5, x + 9, y, x + 6.5, y);heartShape.bezierCurveTo(x + 4, y, x + 2.5, y + 2.5, x + 2.5, y + 2.5);const geometry = new THREE.ShapeGeometry(heartShape);const material = new THREE.MeshBasicMaterial({ color: "#ea80b0" });const heart = new THREE.Mesh(geometry, material);heart.scale.set(3, 3, 3);return heart;}function createScene() {const scene = new THREE.Scene();const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000);camera.position.z = 50;const renderer = new THREE.WebGLRenderer({ canvas: pinkboard });renderer.setSize(window.innerWidth, window.innerHeight);const heart = createHeart();scene.add(heart);function animate() {requestAnimationFrame(animate);heart.rotation.x = mouseY;heart.rotation.y = mouseX;renderer.render(scene, camera);}animate();}createScene();</script></body>
</html>

在這個修改后的代碼中,我們使用document.addEventListener("mousemove", onDocumentMouseMove, false);來監聽鼠標的移動事件,并將鼠標在窗口中的坐標存儲在mouseXmouseY中。然后在animate函數中,將mouseX作為愛心的y軸旋轉角度,將mouseY作為愛心的x軸旋轉角度來實現隨鼠標滑動轉動的效果。

再分享一個html愛心+彈幕效果

在這里插入圖片描述
這里可以直接看查源碼內容刷新,最后一個是放大跳轉網頁

效果如下

在這里插入圖片描述

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

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

相關文章

【005】ts學習筆記【函數擴展】

函數擴展 參數類型 //注意&#xff0c;參數不能多傳&#xff0c;也不能少傳 必須按照約定的類型來 const fn (name: string , age : number ) : string > {return name age }let desc fn( "張三", 18) console.log(desc)可選參數與默認值 //可選的參數 和 默…

深入理解Flink Mailbox線程模型

文章目錄 整體設計processMail1.Checkpoint Tigger2.ProcessingTime Timer Trigger processInput兼容SourceStreamTask 整體設計 Mailbox線程模型通過引入阻塞隊列配合一個Mailbox線程的方式&#xff0c;可以輕松修改StreamTask內部狀態的修改。Checkpoint、ProcessingTime Ti…

@Repeatable的作用以及具體如何使用

文章目錄 1. 前言2. 先說結論3. 案例演示 1. 前言 最近無意看到某些注解上有Repeatable&#xff0c;出于比較好奇&#xff0c;因此稍微研究并寫下此文章。 2. 先說結論 Repeatable的作用&#xff1a;使被他注釋的注解可以在同一個地方重復使用。 具體使用如下&#xff1a; T…

CentOS7源碼安裝MySQL詳細教程

&#x1f60a; 作者&#xff1a; Eric &#x1f496; 主頁&#xff1a; https://blog.csdn.net/weixin_47316183?typeblog &#x1f389; 主題&#xff1a;CentOS7源碼安裝MySQL詳細教程 ?? 創作時間&#xff1a; 2023年08月014日 文章目錄 1、安裝的四種方式2、源碼安裝…

深度解析:DDoS攻擊與先進防御策略

目錄 DDoS 介紹 DDoS 攻擊理論 DDoS 介紹 DDoS&#xff08;分布式拒絕服務&#xff09;攻擊是一種惡意網絡活動&#xff0c;旨在通過同時向目標系統發送大量請求或流量&#xff0c;使其無法正常運行或提供服務。攻擊者通常利用網絡上的多個計算機和設備&#xff0c;形成一個&…

極智嘉x吉利汽車 x京東物流,引領汽車行業智慧物流新變革!

近日&#xff0c;中國領先的汽車制造商吉利汽車攜手中國領先的技術驅動的供應鏈解決方案及物流服務商京東物流、全球倉儲機器人引領者極智嘉(Geek)&#xff0c;在西安吉利汽車制造基地RDC倉庫率先落地SkyPick上存下揀解決方案&#xff0c;實現了全物流鏈精益化、智能化、一體化…

Spring-4-掌握Spring事務傳播機制

今日目標 能夠掌握Spring事務配置 Spring事務管理 1 Spring事務簡介【重點】 1.1 Spring事務作用 事務作用&#xff1a;在數據層保障一系列的數據庫操作同成功同失敗 Spring事務作用&#xff1a;在數據層或業務層保障一系列的數據庫操作同成功同失敗 1.2 案例分析Spring…

STM32--TIM定時器(2)

文章目錄 輸出比較PWM輸出比較通道參數計算舵機簡介直流電機簡介TB6612 PWM基本結構PWM驅動呼吸燈PWM驅動舵機PWM控制電機 輸出比較 輸出比較&#xff0c;簡稱OC&#xff08;Output Compare&#xff09;。 輸出比較的原理是&#xff0c;當定時器計數值與比較值相等或者滿足某種…

【數據結構OJ題】有效的括號

原題鏈接&#xff1a;https://leetcode.cn/problems/valid-parentheses/ 目錄 1. 題目描述 2. 思路分析 3. 代碼實現 1. 題目描述 2. 思路分析 這道題目主要考查了棧的特性&#xff1a; 題目的意思主要是要做到3點匹配&#xff1a;類型、順序、數量。 題目給的例子是比較…

【Hibench 】完成 HDP-Spark 性能測試

&#x1f341; 博主 "開著拖拉機回家"帶您 Go to New World.?&#x1f341; &#x1f984; 個人主頁——&#x1f390;開著拖拉機回家_Linux,Java基礎學習,大數據運維-CSDN博客 &#x1f390;?&#x1f341; &#x1fa81;&#x1f341; 希望本文能夠給您帶來一定的…

單片機實訓報告

這周我們進行了單片機實訓&#xff0c;一周中我們通過七個項目1&#xff1a;P1 口輸入/輸出 2&#xff1a;繼電器控制 3 音頻控制 4&#xff1a;子程序設計 5&#xff1a;字符碰頭程序設計 6&#xff1a;外部中斷 7&#xff1a; 急救車與交通信號燈&#xff0c;練習編寫了子程…

mysql 設置 mysql 日志時間與系統時間保持一致

臨時設置 mysql> show variables like %log_timestamps%;-----------------------| Variable_name | Value |-----------------------| log_timestamps | UTC |-----------------------1 row in set (0.00 sec)系統是 CST &#xff0c; nysql 是 UTC當UTC時間為0點時&am…

docker的使用方法總結

Docker是一個非常強大的工具&#xff0c;它可以用于創建、部署和運行應用程序。以下是一些docker相關的常用指令&#xff0c; 1、查看docker版本 docker version 2、查看正在運行的Docker容器 docker ps 3、查看所有的docker容器&#xff08;包括沒有運行的容器&#xff0…

Python 之 Http 獲取網頁的 html 數據,并去掉 html 格式等相關信息

Python之 Http 獲取網頁的 html 數據,并去掉 html 格式等相關信息 目錄 Python之 Http 獲取網頁的 html 數據,并去掉 html 格式等相關信息

SCF金融公鏈新加坡啟動會 創新驅動未來

新加坡迎來一場引人矚目的金融科技盛會&#xff0c;SCF金融公鏈啟動會于2023年8月13日盛大舉行。這一受矚目的活動將為金融科技領域注入新的活力&#xff0c;并為廣大投資者、合作伙伴以及關注區塊鏈發展的人士提供一個難得的交流平臺。 在SCF金融公鏈啟動會上&#xff0c; Wil…

級聯(數據字典)

二級級聯&#xff1a; 一&#xff1a;新建兩個Bean 父級&#xff1a; /*** Description 數據字典* Author WangKun* Date 2023/7/25 10:15* Version*/ Data AllArgsConstructor NoArgsConstructor TableName("HW_DICT_KEY") public class DictKey implements Seri…

excel快速選擇數據、選擇性粘貼、凍結單元格

一、如何快速選擇數據 在excel中&#xff0c;希望選擇全部數據&#xff0c;通常使用鼠標選擇數據然后往下拉&#xff0c;當數據很多時&#xff0c;也可單擊單元格使用ctrl A選中全部數據&#xff0c;此外&#xff0c;具體介紹另一種方法。 操作&#xff1a;ctrl shift 方向…

【C++】STL---list

STL---list 一、list 的介紹二、list 的模擬實現1. list 節點類2. list 迭代器類&#xff08;1&#xff09;前置&#xff08;2&#xff09;后置&#xff08;3&#xff09;前置- -、后置- -&#xff08;4&#xff09;! 和 運算符重載&#xff08;5&#xff09;* 解引用重載 和 …

css3新增屬性

文章目錄 css3新增屬性box-shadowborder-radius設置橢圓 position: sticky;漸變背景線性漸變可重復的漸變背景 徑向漸變可重復的漸變背景 過渡分屬性 動畫關鍵幀與transition的關系demo 變形平移使用 旋轉使用 其他使用立體效果perspective元素位于3D空間還是平面中 縮放變形的…

tornado在模板中遍歷二維數組

要在Tornado模板中遍歷一個二維數組&#xff0c;你可以使用Tornado的模板語法來實現迭代和顯示數組中的每個元素。 以下是一個示例&#xff0c;演示如何在Tornado模板中遍歷和顯示二維數組的內容&#xff1a; template.html: <!DOCTYPE html> <html> <head&g…