js实现ascii字符画轮换效果代码
代码语言:html
所属分类:布局界面
代码描述:js实现ascii字符画轮换效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<html> <head> <style> body { background: #222222; } .morph-section { width: 400px; height: 400px; position: absolute; left: 50%; top: 50%; margin-top: -200px; margin-left: -200px; font-family: monospace; color: #fff; } .info { font-family: monospace; position: absolute; line-height: 20px; font-size: 14px; left: 20px; bottom: 20px; color: #fff; } a { color: #f9f9f9; } </style> </head> <body> <pre class="morph-section"> ____ o8%8888, o88%8888888. 8'- -:8888b 8' 8888 d8.-=. ,==-.:888b >8 `~` :`~' d8888 88 ,88888 88b. `-~ ':88888 888b ~==~ .:88888 88888o--:':::8888 `88888| :::' 8888b 8888^^' 8888b d888 ,%888b. d88% %%%8--'-. /88:.__ , _%-' --- - '''::===..-' = --. ` </pre><script> /** * Ascii Morph */ var AsciiMorph = (function() { 'use strict'; var element = null; var canvasDimensions = {}; var renderedData = []; var framesToAnimate = []; var myTimeout = null; /** * Utils */ function extend(target, source) { for (var key in source) { if (!(key in target)) { target[key] = source[key]; } } return target; } function repeat(pattern, count) { if (count < 1) return ''; var result = ''; while (count > 1) { if (count & 1) result += pattern; count >>= 1, pattern += pattern; } return result + pattern; } function replaceAt(string, index, character) { return string.substr(0, index) + character + string.substr(index+character.length); } /** * AsciiMorph */ function init(el, canvasSize) { // Save the element element = el; canvasDimensions = canvasSize; } function squareOutData(data) { var i; var renderDimensions = { x: 0, y: data.length }; // Calculate centering numbers for (i = 0; i < data.length; i++) { if (data[i].length > renderDimensions.x) { renderDimensions.x = data[i].length } } // Pad out right side of data to square it out for (i = 0; i < data.length; i++) { if (data[i].length < renderDimensions.x) { data[i] = (data[i] + repeat(' ', renderDimensions.x - data[i].length)); } } var paddings = { x: Math.floor((canvasDimensions.x - renderDimensions.x) / 2), y: Math.floor((canvasDimensions.y - renderDimensions.y) / 2) } // Left Padding for (var i = 0; i < data.length; i++) { data[i] = repeat(' ', paddings.x) + data[i] + repeat(' ', paddings.x); } // Pad out the rest of everything for (var i = 0; i < canvasDimensions.y; i++) { if (i < paddings.y) { data.unshift(repeat(' ', canvasDimensions.x)); } else if (i > (paddings.y + renderDimensions.y)) { data.push(repeat(' ', canvasDimensions.x)); } } return data; } // Crushes the frame data by 1 unit. function getMorphedFrame(data) { var firstInLine, lastInLine = null; var found = false; for (var i = 0; i < data.length; i++) { var line = data[i]; firstInLine = line.search(/\S/); if (firstInLine === -1) { firstInLine = null; } for (var j = 0; j < line.length; j++) { if (line[j] != ' ') { lastInLine = j; } } if (firstInLine !== null && lastInLine !== null) { data = crushLine(data, i, firstInLine, lastInLine) found = true; } firstInLine = null, lastInLine = null; } if (found) { return data; } else { return false; } } function crushLine(data, line, start, end) { var centers = { .........完整代码请登录后点击上方下载按钮下载查看
网友评论0