|
|
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
- <title>Speaker View</title>
- <style>
- body {
- font-family: Arial, sans-serif;
- padding: 20px;
- background-color: white;
- }
-
- .line {
- font-size: 20px;
- margin: 5px 0;
- }
-
- .currentLine {
- background-color: yellow;
- }
- </style>
- </head>
- <body>
- <h1>Speaker View</h1>
- <div id="speech"></div>
-
- <script src="/socket.io/socket.io.js"></script>
- <script>
- const socket = io();
- const speechDiv = document.getElementById('speech');
- let speechLines = [];
- let currentLineIndex = 0;
-
- // Render the speech and highlight the current line
- function renderSpeech() {
- speechDiv.innerHTML = '';
- speechLines.forEach((line, index) => {
- const div = document.createElement('div');
- div.classList.add('line');
- if (index === currentLineIndex) {
- div.classList.add('currentLine');
- }
- div.textContent = line;
- div.onclick = () => updatePosition(index); // Allow clicking to select a line
- speechDiv.appendChild(div);
- });
- }
-
- // Send updated position to the server
- function updatePosition(newPosition) {
- currentLineIndex = newPosition;
- socket.emit('update_position', currentLineIndex);
- renderSpeech();
- }
-
- // Listen for speech text and load it
- socket.on('load_speech', (lines) => {
- speechLines = lines;
- currentLineIndex = 0;
- renderSpeech();
- });
-
- // Add keyboard navigation
- document.addEventListener('keydown', (event) => {
- if (event.key === 'ArrowDown' && currentLineIndex < speechLines.length - 1) {
- updatePosition(currentLineIndex + 1);
- } else if (event.key === 'ArrowUp' && currentLineIndex > 0) {
- updatePosition(currentLineIndex - 1);
- }
- });
- </script>
- </body>
- </html>
|