js實現的頁面矩陣圖形變換特效_javascript技巧
本文實例講述了js實現的頁面矩陣圖形變換特效。分享給大家參考,具體如下:
運作效果截圖如下:
具體程式碼如下:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>matrix</title> <style type="text/css"> body { margin:0; padding:0;background:black; } .rect { background:green; } .arc { border-radius:5px; background:green; box-shadow:2px solid #fff; } ul { list-style:none; margin:0; padding:0; position:absolute; } li { width:20px; height:20px; position:absolute; } h1 { text-align:center; line-height:150px; font-size:150px; color:green; } </style> </head> <body> <h1>Chrome下兼容</h1> </body> <script type="text/javascript"> var body = document.getElementsByTagName("body")[0]; function getColor() { var color = "rgb("; color += (10+Math.round(Math.random()*245)); color += ","; color += (10+Math.round(Math.random()*245)); color += ","; color += (10+Math.round(Math.random()*245)); color += ")"; return color; } var matrixData = [ [1, 0, 0, 0, 1], [0, 1, 0, 1, 0], [0, 0, 1, 0, 0], [0, 1, 0, 1, 0], [1, 0, 0, 0, 1] ]; var matrixData2 = [ [0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0],//1 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1],//2 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1],//3 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],//4 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],//5 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],//6 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0],//7 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0],//8 [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],//9 [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],//9 [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],//10 [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1],//11 [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1],//12 [0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0] //13 ]; function createDom(attrs) { var dom = document.createElement(attrs.tagName); attrs.style ? dom.setAttribute("style", attrs.style) : void(0); attrs.on ? dom.setAttribute("data-on", attrs.on) : void(0); return dom; } var ulList = []; var width = window.innerWidth; var height = window.innerHeight; var cols = Math.floor(width/120); var rows = Math.floor(height/120); var xOffset = Math.floor((width%120)/2); function createFlyer(attrs) { var iLength = matrixData.length, jLength = matrixData[0].length, radius = 20, ul = null, bgColor = getColor(); ul = createDom({tagName: "ul", style: "height:"+iLength*radius+"px; width:"+jLength*radius+"px; left:"+attrs.left+"px; top:"+attrs.top+"px"}); document.body.appendChild(ul); for(var i=0; i<5; i++) { var _data = matrixData[i]; for(var j=0; j<5; j++) { var style = "width:"+radius+"px; height:"+radius+"px;left:"+j*radius+"px; top:"+i*radius+"px;background:"+(_data[j] == 0 ? "transparent": bgColor); var li = createDom({tagName: "li", style: style, on: _data[j] ? 1 : 0}); ul.appendChild(li); } } ulList.push(ul); } for(var i=0; i<cols; i++) { for(var j=0; j<rows; j++) { createFlyer({left: i*120+xOffset, top: 120*j}); } } function setULBgColor(dom, color) { var lis = dom.getElementsByTagName("li"); for(var i=0,length=lis.length; i<length; i++) { var _li = lis[i]; console.log(_li.getAttribute("data-on")); _li.getAttribute("data-on") ? _li.style.backgroundColor = color : void(0); } } function reset(fn) { var lastIndex = ulList.length - 1; for(var i=0,length=ulList.length; i<length; i++) { var ul = ulList[i]; (function(i, ul) { setTimeout(function() { setULBgColor(ul, getColor()); if(i === lastIndex) { fn ? fn() : void(0); } }, i*30); })(i, ul); } }; function firstStep() { var color = getColor(); var lastIndex = ulList.length - 1; for(var i=0,length=ulList.length; i<length; i++) { var ul = ulList[i]; (function(i, ul) { setTimeout(function() { setULBgColor(ul, color); if(i == lastIndex) { secondStep(); } }, i*30); })(i, ul); } } function secondStep() { reset(thirdStep); } function thirdStep() { var angle = 0; var addAngle = 15; var interval = setInterval(function() { angle += addAngle; if(angle > 720) { angle = 0; clearInterval(interval); createMatrix2(); } for(var i=0,length=ulList.length; i<length; i++) { var ul = ulList[i]; ul.style.webkitTransform = "rotate("+angle+"deg)"; } }, 50); } function createMatrix2() { body.innerHTML = ""; var iLength = matrixData2.length, jLength = matrixData2[0].length, radius = 20, ul = null, height = jLength*radius, width = iLength*radius, bgColor = getColor(), left = (window.innerWidth - width)/2, top = (window.innerHeight - height)/2 console.log(window.innerWidth); console.log(width); ul = createDom({tagName: "ul", style: "height:"+iLength*radius+"px; width:"+jLength*radius+"px; left:"+left+"px; top:"+top+"px"}); document.body.appendChild(ul); for(var i=0; i<iLength; i++) { var _data = matrixData2[i]; for(var j=0; j<jLength; j++) { var style = "width:"+radius+"px; height:"+radius+"px;left:"+j*radius+"px; top:"+i*radius+"px;background:"+(_data[j] == 0 ? "transparent": getColor()); var li = createDom({tagName: "li", style: style, on: _data[j] ? 1 : 0}); li.className = "arc"; ul.appendChild(li); } } ul.style.webkitTransform = "scale(0.1, 0.1)"; var scale = 0.1; var interval = setInterval(function() { ul.style.webkitTransform = "scale("+scale+", "+scale+")"; scale += 0.1; if(scale > 1) { clearInterval(interval); } }, 50); } firstStep(); </script> </html>
更多關於js特效相關內容有興趣的讀者可查看本站專題:《jQuery動畫與特效用法總結》及《jQuery常見經典特效匯總》
希望本文所述對大家JavaScript程式設計有所幫助。

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

如何使用JS和百度地圖實現地圖平移功能百度地圖是一款廣泛使用的地圖服務平台,在Web開發中經常用於展示地理資訊、定位等功能。本文將介紹如何使用JS和百度地圖API實作地圖平移功能,並提供具體的程式碼範例。一、準備工作使用百度地圖API前,首先需要在百度地圖開放平台(http://lbsyun.baidu.com/)上申請一個開發者帳號,並建立一個應用程式。創建完成

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

如何使用PHP和JS創建股票蠟燭圖股票蠟燭圖是股票市場中常見的技術分析圖形,透過繪製股票的開盤價、收盤價、最高價和最低價等數據,幫助投資者更直觀地了解股票的價格波動情形。本文將教你如何使用PHP和JS創建股票蠟燭圖,並附上具體的程式碼範例。一、準備工作在開始之前,我們需要準備以下環境:1.一台運行PHP的伺服器2.一個支援HTML5和Canvas的瀏覽器3

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟,需要具體程式碼範例隨著網路和科技的快速發展,股票交易已成為許多投資者的重要途徑之一。而股票分析是投資人決策的重要一環,其中蠟燭圖被廣泛應用於技術分析。學習如何使用PHP和JS繪製蠟燭圖將為投資者提供更多直觀的信息,幫助他們更好地做出決策。蠟燭圖是一種以蠟燭形狀來展示股票價格的技術圖表。它展示了股票價格的

實作微信小程式中的卡片翻轉特效在微信小程式中,實現卡片翻轉特效是一種常見的動畫效果,可以提升使用者體驗和介面互動的吸引力。以下將具體介紹如何在微信小程式中實現卡片翻轉的特效,並提供相關程式碼範例。首先,需要在小程式的頁面佈局檔案中定義兩個卡片元素,一個用於顯示正面內容,一個用於顯示背面內容,具體範例程式碼如下:<!--index.wxml-->&l

如何使用JS和百度地圖實現地圖點擊事件處理功能概述:在網路開發中,經常需要使用地圖功能來展示地理位置和地理資訊。而地圖上的點擊事件處理是地圖功能中常用且重要的一環。本文將介紹如何使用JS和百度地圖API來實現地圖的點擊事件處理功能,並給出具體的程式碼範例。步驟:匯入百度地圖的API檔案首先,要在HTML檔案中匯入百度地圖API的文件,可以透過以下程式碼實現:

如何使用JS和百度地圖實現地圖熱力圖功能簡介:隨著互聯網和行動裝置的快速發展,地圖成為了普遍的應用場景。而熱力圖作為一種視覺化的展示方式,能夠幫助我們更直觀地了解數據的分佈。本文將介紹如何使用JS和百度地圖API來實現地圖熱力圖的功能,並提供具體的程式碼範例。準備工作:在開始之前,你需要準備以下事項:一個百度開發者帳號,並建立一個應用,取得到對應的AP

隨著網路金融的快速發展,股票投資已經成為了越來越多人的選擇。而在股票交易中,蠟燭圖是常用的技術分析方法,它能夠顯示股票價格的變動趨勢,幫助投資人做出更精準的決策。本文將透過介紹PHP和JS的開發技巧,帶領讀者了解如何繪製股票蠟燭圖,並提供具體的程式碼範例。一、了解股票蠟燭圖在介紹如何繪製股票蠟燭圖之前,我們首先需要先了解什麼是蠟燭圖。蠟燭圖是由日本人
