0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Youtubeライブのコメントをする入力欄

Posted at

はじめに

ライブ配信にコメントするときにフォーカスが外れて面倒。

コード

デバッグツールのsnipettsに張り付けて、実行するとコメント欄を作成できる。
ちなみにドラッグ可能

// コメント送信関数
function sendComment(str) {
    const iframe = top.document.querySelector('iframe#chatframe');
    const input = iframe.contentDocument.querySelector('yt-live-chat-text-input-field-renderer #input');
    const sendButton = iframe.contentDocument.querySelector('#input-panel yt-button-shape button');
    input.innerText = str;
    input.dispatchEvent(new Event('input'));
    setTimeout(()=> sendButton.click(), 0);
    
}

// 入力フィールドのドラッグ開始位置を格納する変数
let dragStart = { x: 0, y: 0 };

// 入力フィールド作成関数
function createInputField() {
    // 新しいinput要素を作成
    let inputField = document.createElement('input');
    inputField.type = 'text';
    inputField.id = 'custom-input';
    inputField.placeholder = 'Type your comment here...';
    inputField.style.position = 'absolute';
    inputField.style.right = '0';
    inputField.style.top = '50%';
    inputField.style.zIndex = '10000000000';

    // Enterキーが押されたときのイベントリスナーを追加
    inputField.addEventListener('keydown', function(event) {
        if (event.key === 'Enter' || event.keyCode === 13) {
            // 入力欄の内容を取得
            let comment = inputField.value;

            // 入力欄をクリア
            inputField.value = '';

            // コメントを送信
            sendComment(comment);
        }
    });

    // ドラッグ開始イベントのリスナーを追加
    inputField.addEventListener('mousedown', function(event) {
        // ドラッグ開始位置を記録
        dragStart = { x: event.clientX - inputField.offsetLeft, y: event.clientY - inputField.offsetTop };
    });

    // ドラッグ中イベントのリスナーを追加
    document.addEventListener('mousemove', function(event) {
        // ドラッグ中でなければ無視
        if (!dragStart.x || !dragStart.y) return;

        // 入力フィールドの位置を更新
        inputField.style.left = event.clientX - dragStart.x + 'px';
        inputField.style.top = event.clientY - dragStart.y + 'px';
        inputField.style.right = 'auto';
    });

    // ドラッグ終了イベントのリスナーを追加
    document.addEventListener('mouseup', function(event) {
        // ドラッグ開始位置をリセット
        dragStart = { x: 0, y: 0 };
    });

    // 作成したinput要素をページの末尾に追加
    document.body.appendChild(inputField);

    // 作成したinput要素にフォーカスを設定
    inputField.focus();
}

// 入力欄を作成
createInputField();
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?