[BC] 詳細画面 とりま動くものにはなった

This commit is contained in:
2024-04-25 04:07:32 +09:00
parent 0a1e46dd37
commit d50e23172b
6 changed files with 96 additions and 22 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 42 KiB

+21 -1
View File
@@ -1,12 +1,32 @@
/* vim:set tabstop=2 softtabstop=2 expandtab :*/
@font-face @font-face
{ {
font-family: 'Nikumaru'; font-family: 'Nikumaru';
src: url(./assets/nikumaru.otf); src: url(./assets/nikumaru.otf);
} }
html, body
{
overflow: hidden;
}
body body
{ {
background-color: black; background-color: black;
font-family: Nikumaru; }
#canvas
{
width: 100%;
height: 100%;
padding: 0;
margin: 0;
overflow: unset;
border: none
!important;
outline: none
!important;
display: block;
} }
+2 -1
View File
@@ -6,7 +6,8 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="//code.jquery.com/jquery-3.3.1.min.js"></script> <script src="//code.jquery.com/jquery-3.3.1.min.js"></script>
<link href="./talk.css?<?= filemtime ('./talk.css') ?>" rel="stylesheet" /> <link rel="stylesheet" href="./talk.css?<?= filemtime ('./talk.css') ?>" />
<link rel="preconnect" href="./assets/nikumaru.otf" />
<title>あほ</title> <title>あほ</title>
<input type="hidden" id="dt" value="<?= $dt ?>" /> <input type="hidden" id="dt" value="<?= $dt ?>" />
<input type="hidden" id="chat" value="<?= $chat ?>" /> <input type="hidden" id="chat" value="<?= $chat ?>" />
+70 -17
View File
@@ -6,7 +6,7 @@ Talk
{ {
const canvas = new Canvas; const canvas = new Canvas;
setInterval (() => canvas.resize (), 100); window.onresize = () => canvas.resize ();
} }
} }
@@ -19,45 +19,98 @@ Canvas
this.canvas = $ ('#canvas'); this.canvas = $ ('#canvas');
this.ctx = this.canvas[0].getContext ('2d'); this.ctx = this.canvas[0].getContext ('2d');
this.bg = new Image (); (this.bg = new Image ()).src = './assets/bg.jpg';
this.bg.src = './assets/bg.jpg';
this.bg.onload = () => this.resize (); this.bg.onload = () => this.resize ();
(this.nizika = new Image ()).src = './assets/nizika.png';
this.nizika.onload = () => this.resize ();
(this.talking = new Image ()).src = './assets/talking.png';
this.talking.onload = () => this.resize ();
(new FontFace ('Nikumaru', 'url(./assets/nikumaru.otf)')).load ().then (
() => this.resize ());
} }
resize () resize ()
{ {
this.canvas.width ($ (window).width ()); this.canvas[0].width = $ (window).width ();
this.canvas.height ($ (window).height ()); this.canvas[0].height = $ (window).height ();
this.redraw (); this.redraw ();
} }
redraw () redraw ()
{ {
this.putBG (this.canvas.width (), this.canvas.height ()); this.putBG ();
this.putText (0, 0, 15, $ ('#dt').val ());
this.putImage (this.nizika, 370, 260, 1.1);
this.putImage (this.talking, 0, 0, 640 / 1024);
this.putText (75, 43.75, 20, '> ' + $ ('#chat').val (),
undefined, undefined,
true);
this.putText (62.5, 93.75, 31.25, $ ('#answer').val (), 'Nikumaru', '#c00000');
} }
putBG (sizeX, sizeY) putBG ()
{ {
const width = this.bg.width; const [x, y, zoom] = this.convertPosition (0, 0);
const width = this.bg.height * 4 / 3;
const height = this.bg.height;
this.ctx.drawImage (this.bg,
(852 - 640) / 2, 0, width, height,
x, y, width * zoom, height * zoom);
}
putImage (image, x, y, zoom = 1)
{
let zoom2
[x, y, zoom2] = this.convertPosition (x, y);
zoom *= zoom2
this.ctx.drawImage (image,
0, 0, image.width, image.height,
x, y, image.width * zoom, image.height * zoom);
}
putText (x, y, size, text, style = 'sans-serif', colour = 'black',
italic = false)
{
let zoom;
[x, y, zoom] = this.convertPosition (x, y);
size *= zoom;
this.ctx.font = `${italic ? 'italic ' : ''}${Math.trunc (size)}px ${style}`;
this.ctx.fillStyle = colour;
this.ctx.textBaseline = 'top';
this.ctx.fillText (text, x, y);
}
convertPosition (x, y)
{
const sizeX = this.canvas.width ();
const sizeY = this.canvas.height ();
const width = this.bg.height * 4 / 3;
const height = this.bg.height; const height = this.bg.height;
const vertical = sizeY / sizeX > height / width; const vertical = sizeY / sizeX > height / width;
console.log (sizeX, sizeY, width, height);
const zoom = vertical ? (sizeX / width) : (sizeY / height); const zoom = vertical ? (sizeX / width) : (sizeY / height);
const x = vertical ? 0 : ((sizeX - width * zoom) / 2); const baseX = vertical ? 0 : ((sizeX - width * zoom) / 2);
const y = vertical ? ((sizeY - height * zoom) / 2) : 0; const baseY = vertical ? ((sizeY - height * zoom) / 2) : 0;
this.ctx.drawImage (this.bg, return [baseX + x * zoom, baseY + y * zoom, zoom];
0, 0, width, height,
x, y, width, height);
} }
} }
Talk.main (); $ (() => Talk.main ());
+1 -1
View File
@@ -4,7 +4,7 @@ if ($_SERVER['HTTP_HOST'] === 'nizika.monster')
header ('location: //nizika.tv/talk.php'); header ('location: //nizika.tv/talk.php');
$dt = $_GET['dt']; $dt = $_GET['dt'];
$name = $_GET['chat']; $chat = $_GET['chat'];
$answer = $_GET['answer']; $answer = $_GET['answer'];
require_once './talk.frm.php'; require_once './talk.frm.php';