+61
-5
@@ -2,6 +2,9 @@
|
||||
let videoId;
|
||||
let lastVideoId;
|
||||
let comments = [];
|
||||
let commentFontSize = '';
|
||||
let commentFontPos = '';
|
||||
let commentColour = '';
|
||||
|
||||
const noon = new Audio ('//nizika.tv/assets/noon.wav');
|
||||
|
||||
@@ -13,6 +16,10 @@ return (([m, s]) => m * 60 + (+s)) (time.split (':'));
|
||||
setInterval (() => {
|
||||
const sendBtn = document.getElementById ('niconico-comment-send');
|
||||
const comBox = document.getElementById ('niconico-comment-input');
|
||||
const overlay = document.getElementById ('comment-overlay');
|
||||
const dialog = document.getElementById ('comment-dialog');
|
||||
const styleSize = document.getElementById ('comment-place');
|
||||
const changeColour = document.getElementById ('comment-color');
|
||||
|
||||
const sendComment = () =>
|
||||
{
|
||||
@@ -37,9 +44,24 @@ comBox.value = '';
|
||||
noon.play ();
|
||||
}, 100);
|
||||
};
|
||||
if (sendBtn == null || comBox == null)
|
||||
if (sendBtn == null || comBox == null || styleSize == null /*|| changeColour == null*/)
|
||||
return;
|
||||
|
||||
styleSize.addEventListener ('click', e =>
|
||||
{
|
||||
console.log (1)
|
||||
overlay.style.display = 'block';
|
||||
dialog.style.display = 'block';
|
||||
});
|
||||
|
||||
document.getElementById('okButton').addEventListener('click', function() {
|
||||
const form = document.getElementById('dialogForm');
|
||||
const formData = new FormData(form);
|
||||
commentFontPos = formData.get('position');
|
||||
commentFontSize = formData.get('size');
|
||||
closeDialog();
|
||||
});
|
||||
|
||||
comBox.addEventListener ('keydown',
|
||||
function (e)
|
||||
{
|
||||
@@ -74,17 +96,33 @@ canvas.height = 720;
|
||||
const ctx = canvas?.getContext ('2d');
|
||||
if (ctx)
|
||||
{
|
||||
ctx.font = '48px Arial'; // フォントサイズとフォントタイプを設定
|
||||
ctx.textBaseline = 'top'
|
||||
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
||||
ctx.lineWidth = 4;
|
||||
const curTime = document.querySelector ('video').currentTime
|
||||
const curTime = document.querySelector ('video').currentTime;
|
||||
const duration = document.querySelector ('video').duration;
|
||||
comments.forEach ((e, i) =>
|
||||
{
|
||||
[['black', 'strokeText'], ['white', 'fillText']].forEach (([cl, f]) =>
|
||||
const styles = e.style.split (/\s+/);
|
||||
const colorStyles = styles.filter (style => style[0] === '#');
|
||||
const color = colorStyles[0] ?? 'white';
|
||||
if (styles.includes ('large'))
|
||||
ctx.font = '96px Arial';
|
||||
else if (styles.includes ('small'))
|
||||
ctx.font = '24px Arial';
|
||||
else
|
||||
ctx.font = '48px Arial'; // フォントサイズとフォントタイプを設定
|
||||
[['black', 'strokeText'], [color, 'fillText']].forEach (([cl, f]) =>
|
||||
{
|
||||
ctx.fillStyle = cl;
|
||||
ctx[f] (e.content, canvas.width + (e.time - curTime - 1) * (canvas.width + e.content.length * 48) / 4, 6 + 60 * (i % 12));
|
||||
if (styles.includes ('top'))
|
||||
e.time <= curTime && curTime < e.time + 4 && ctx[f] (e.content, (canvas.width - e.content.length * parseInt (ctx.font)) / 2, 0);
|
||||
else if (styles.includes ('bottom'))
|
||||
e.time <= curTime && curTime < e.time + 4 && ctx[f] (e.content, (canvas.width - e.content.length * parseInt (ctx.font)) / 2, canvas.height - parseInt (ctx.font));
|
||||
else
|
||||
{
|
||||
ctx[f] (e.content, canvas.width + (Math.min (e.time, duration - 2) - curTime - 1) * (canvas.width + e.content.length * 48) / 5, 6 + 60 * (i % 12));
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -92,5 +130,23 @@ ctx[f] (e.content, canvas.width + (e.time - curTime - 1) * (canvas.width + e.con
|
||||
let cmtStyle;
|
||||
if ((cmtStyle = document.querySelector ('.comment-threads')?.parentElement?.style) != null)
|
||||
cmtStyle.display = 'none';
|
||||
|
||||
let pos = document.querySelector ('#comment-place')
|
||||
let cl = document.querySelector ('#comment-color')
|
||||
|
||||
if (pos) pos.style.display = 'none';
|
||||
if (cl) cl.style.display = 'none'
|
||||
}, 30);
|
||||
|
||||
setInterval (() =>
|
||||
{
|
||||
let video = document.querySelector ('video');
|
||||
video?.parentElement.insertBefore (document.querySelector ('#comment-layer'), video.nextElementSibling);
|
||||
}, 1000);
|
||||
|
||||
function closeDialog() {
|
||||
document.getElementById('comment-overlay').style.display = 'none';
|
||||
document.getElementById('comment-dialog').style.display = 'none';
|
||||
}let videoId;
|
||||
|
||||
```
|
||||
新しい課題から参照
ユーザをブロックする