キャンバス版体内時計の実装例
2022-01-11 14:30:07
ベテランのウェブユーザーはこの魔法の時計プラグインを覚えているかどうか。
十数年来のウェブサーファーとして、私は少し前にこの写真を見て、即座に防御を破り、直接10年前のQQ空間に夢想し、年月の浪費、時間の経過、若さがない、それは悲しくないです。 /実際の
まず、このような素晴らしい、そして楽しいプラグインを提供してくれた原作者に感謝します。{{a http://chabudai.org/blog/?p=59
今回は、便利な図にするために、それは直接pixi.jsがアニメーションを行うことであり、油管のビデオからアニメーション素材、PSフレームバイフレームキーイングとエクスポートを取得し、プロセスが詳細になることはありません。スプライトマップと対応するjsonファイルを合成した後、記事の最後に載せます。
コアAPIは PIXI.AnimatedSprite .
代码也是很短,就直接放到下面了。
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>HoneHoneClock</title>
<style>
* {
padding: 0;
margin: 0;
}
html, body {
Breite: 100%;
Höhe: 100%;
}
body {
background-color: lightcyan;
}
canvas {
Position: absolut;
links: 0;
top: 0;
Breite: 100%;
Höhe: 100%;
z-index: 1;
}
</style>
</head>
<body>
<canvas class="canvas"></canvas>
<script src="pixi_5.3.4.min.js"></script>
<script src="Stats.min.js"></script>
<script>
(async function () {
con stats = new Stats()
document.body.appendChild(stats.domElement)
let pageWidth = 0
let pageHeight = 0
let clockHour1, clockHour2
let clockMin1, clockMin2
let clockSec1, clockSec2
const $canvas = document.querySelector('Leinwand')
const renderer = new PIXI.Renderer({
Ansicht: $canvas,
width: pageWidth,
height: pageHeight,
transparent: true,
autoDensity: wahr,
antialias: true
})
// 人体时钟
class Clock extends PIXI.Container {
constructor (name) {
super()
constures = loader.resources[honeHoneClockJson].textures
let frames = []
let aniData = []
if (this.frames) {
frames = this.frames
aniData = this.aniData
}
sonst {
aniData = [
{
Präfix: '0',
count: 6,
frameFrom: -1,
frameTo: -1,
},
{
Präfix: '1',
count: 9,
frameFrom: -1,
frameTo: -1,
},
{
Präfix: '2',
count: 7,
frameFrom: -1,
frameTo: -1,
},
{
Präfix: '3',
count: 6,
frameFrom: -1,
frameTo: -1,
},
{
Präfix: '4',
count: 9,
frameFrom: -1,
frameTo: -1,
},
{
Präfix: '5',
count: 14,
frameFrom: -1,
frameTo: -1,
},
{
Präfix: '6',
count: 7,
frameFrom: -1,
frameTo: -1,
},
{
Präfix: '7',
count: 10,
frameFrom: -1,
frameTo: -1,
},
{
Präfix: '8',
count: 7,
frameFrom: -1,
frameTo: -1,
},
{
Präfix: '9',
count: 9,
frameFrom: -1,
frameTo: -1,
},
]
let k = 0
for (let i = 0; i < aniData.length; i++) {
const data = aniData[i]
data.frameFrom = k
for (let j = 1; j <= data.count; j++) {
k++
frames.push(textures[`${data.prefix}(${j}).png`])
}
data.frameTo = k - 1
}
this.frames = frames
this.aniData = aniData
}
const ani = new PIXI.AnimatedSprite(frames)
ani.anchor.set(0.5, 1)
ani.animationSpeed = 0.4
this.stopAt = -1
ani.onFrameChange = () => {
if (ani.currentFrame === this.stopAt) {
ani.stop()
}
}
this.addChild(ani)
this.name = name
this.ani = ani
this.num = -1
}
set Zahl (Zahl) {
if (this.num !== number) {
this.num = Zahl
this.stopAt = this.aniData[Zahl].frameTo
this.ani.gotoAndPlay(this.aniData[number].frameFrom)
}
}
}
const stage = new PIXI.Container()
stage.name = 'stage'
let clockWrap
const ticker = new PIXI.Ticker()
let now = new Datum()
let lastTime = now.getTime()
const loop = function () {
stats.begin()
jetzt = neues Datum()
if (now.getTime() - lastTime >= 1000) {
let hours = now.getHours()
if (hours > 9) {
clockHour1.number = Math.floor(hours / 10)
UhrStunde2.Zahl = Stunden % 10
}
sonst {
UhrStunde1.Zahl = 0
UhrStunde2.Zahl = Stunden
}
let minutes = now.getMinutes()
if (minutes > 9) {
UhrMin1.Zahl = Math.floor(Minuten / 10)
clockMin2.number = Minuten % 10
}
sonst {
UhrMin1.Zahl = 0
clockMin2.number = Minuten
関連
-
ポップアップウィンドウのhtml実装例
-
Html5で新しくなったこと
-
Html5モバイルdivは、ナビゲーションバーの下部を達成するために下部に固定されているいくつかの方法
-
htmlテーブルのレンダリングバイオグラフィーとセル幅の不具合が解決される
-
モバイル適応のためのremやviewportの使い方を説明する。
-
recorder.js Html5ベースの録画機能実装
-
Html5ページで携帯電話の仮想キーボードのポップアップを無効化する方法
-
人気のあるいくつかのHTML5 UIフレームワークの比較(要約)
-
HTMLテーブルのテーブルボーダーの実装アイデア
-
HTML5 における dialog 要素のテイスト
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン