質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

463閲覧

WebSocketでオブジェクトを動かしたい。

43923298504

総合スコア0

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

WebSocket

WebSocketとは双方向・全二重コミュニケーションのためのAPIでありプロトコルのことを指します。WebSocketはHTML5に密接に結びついており、多くのウェブブラウザの最新版に導入されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2022/04/18 11:39

編集2022/04/19 08:24

最終的にはWebSocket+Node.jsを使ってアメーバピグのようなウェブアプリを作ろうと思っています。
まずWebSocketを理解するために動くサンプルコートを拾ってきて、そこに
divタグで色を付けた四角をサーバーから受け取ったmessageを数値に変換して、位置情報を書き換えるという事をしてみたいのですが、エラーはでないのに、四角が動きません。
JavaScriptも初学者なので、何故動かないかが分かりません。
一応JavaScriptの基本は本を一冊買ったのでifとかforとかwhileは理解しているレベルです。
よろしくお願いします。

ソースコード

<html> <body> <head> <style type="text/css"> <!--
div.waku { border:1px solid black; /* 1pxの黒の枠を付ける */ width :300px; /* 横幅を300pxにする */ height:200px; /* 縦幅を200pxにする */ position:relative; /* 相対位置指定を宣言 */ } div.mini { border:1px solid green; /* 1pxの緑の枠を付ける */ width :50px; /* 横幅を50pxにする */ height:50px; /* 縦幅を50pxにする */ } div#aka { background-color:red; /* 背景色を赤色にする */ position:absolute; /* 絶対位置指定を宣言 */ left:50px; /* 左から50pxの位置に表示 */ top:50px; /* 上から50pxの位置に表示 */ z-index:2; /* 奥行番号を2にする */ } div#ao { background-color:blue; /* 背景色を青にする */ position:absolute; /* 絶対位置指定を宣言 */ left:80px; /* 左から80pxの位置に表示 */ top:80px; /* 上から80pxの位置に表示 */ z-index:1; /* 奥行番号を1にする */ } --> </style> </head> <h1>simple chat</h1> <input id="inputText" type="text"> <input id="sendButton" type="submit"> <ul id="messageList" /> <div class="waku"> <div class="mini" id="aka"></div> <div class="mini" id="ao"></div> </div> <script src="/socket.io/socket.io.js"></script> <script> const socket = io(); var square = new Array(); square[0]=document.getElementById("aka"); var x; const clearText = () => { document.getElementById('inputText').value = ''; } const addMessageList = (message) => { //受け取ったメッセージを追加しておく //2つのID付divタグの情報を配列にしておく const ul = document.getElementById('messageList'); const li = document.createElement('li'); const text = document.createTextNode(message); li.appendChild(text); ul.appendChild(li); }; document.getElementById('sendButton').addEventListener('click', () => { // let inputMessage = document.getElementById('inputText').value; // if (inputMessage === '') { // return; // } // socket.emit('sendMessage', inputMessage); socket.emit('sendMessage', "10"); clearText(); }); // 'receiveMessage' イベントの発火を検知 // 第一引数には受信したメッセージが入る socket.on('receiveMessage', (message) => { // 受信したメッセージをulタグに挿入 //受信したメッセージを処理 addMessageList(message); var x = x + parseInt(document.createTextNode(message)); square[0].style.left = x + x; "px"; console.log("style.leftに+10しました"); }); </script>
</body> </html>

サーバー側の処理です。

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');

const app = express();
const server = http.Server(app);
const io = socketIo(server);

const PORT = 3000;

app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html');
});

server.listen(PORT, () => {
console.log(listening on port ${PORT});
});

io.on('connection', (socket) => {
console.log('user connected');
socket.on('sendMessage', (message) => {
console.log('Message has been sent: ', message);

// 'receiveMessage' というイベントを発火、受信したメッセージを全てのクライアントに対して送信する io.emit('receiveMessage', message);

});
});

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

43923298504

2022/04/19 08:21

承知しました。 追記します。
guest

回答1

0

js

1 var x = x + parseInt(document.createTextNode(message)); 2 square[0].style.left = x + x; "px";

この2行にツッコミどころが多いです。

  • グローバル変数 x があるのに、ローカル変数 x を宣言していて、どちらを使う意図なのかわからない
  • グローバル変数 x を使うつもりであれば、その初期値が設定されていない
  • message の中身がどうなっているのか質問文からは不明だが、document.createTextNode(message) で DOM の Text ノードを作るのは不要に見える
  • parseInt() の引数に文字列ではなく Text ノードを渡しているので、おそらくパーズ失敗して NaN が返っている
  • style.leftx の2倍を入れようとしている意図がわからない
  • style.left の代入文の後に "px"; という意味のない文字列の文が入っている

投稿2022/04/18 23:40

int32_t

総合スコア20856

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

43923298504

2022/04/19 08:30

ご指摘ありがとうございます。 修正してみます。 xはグローバル変数で使ったほうが便利だと思いますのでxを初期化してみます。 Textノートからの文字列はparseInt()では数値にならないのですね。 Style.leftについては書き方を間違ていました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問