質問編集履歴

3

質問を一部修正

2020/04/10 07:57

投稿

T_Furuta
T_Furuta

スコア25

test CHANGED
File without changes
test CHANGED
@@ -434,23 +434,13 @@
434
434
 
435
435
  ちなみに、このscrollPosに、100と言ったリテラル値を入れると正常に動作します。
436
436
 
437
- ー>追記
437
+ 試しに、
438
-
439
- 申し訳ありません。
440
-
441
- 1つ目の問題については、自己解決しました。
442
-
443
- var scrollPos = $('#bms_messages').offset().top;
444
-
445
- を、
446
438
 
447
439
  var scrollPos = $('#bms_messages').offset().bottom;
448
440
 
449
- にする事で、最下部に移動する事が出来ました。
441
+ var scrollPos = $('#bms_messages').weight();
450
-
442
+
451
- scrollPos値を確認ると、undefinedとありちゃんと値が出ないのが気になるところですが。。
443
+ と試して見た値がundefinedになってしまいほしい値が入ってきません
452
-
453
-
454
444
 
455
445
 
456
446
 
@@ -462,4 +452,8 @@
462
452
 
463
453
  が見れるようにしたいのですが、その方法が分かりませんでした。
464
454
 
465
- こちらに関して、もし分る事がありましたらご教授いただきたくよろしくお願いします
455
+ こちらに関してネットを検索してみて、解決方法が見つかりませんでした。
456
+
457
+
458
+
459
+ ご教授いただけると助かります。よろしくお願いします。

2

回答の片方が解決

2020/04/10 07:57

投稿

T_Furuta
T_Furuta

スコア25

test CHANGED
File without changes
test CHANGED
@@ -434,9 +434,27 @@
434
434
 
435
435
  ちなみに、このscrollPosに、100と言ったリテラル値を入れると正常に動作します。
436
436
 
437
-
437
+ ー>追記
438
+
438
-
439
+ 申し訳ありません。
440
+
441
+ 1つ目の問題については、自己解決しました。
442
+
443
+ var scrollPos = $('#bms_messages').offset().top;
444
+
445
+ を、
446
+
447
+ var scrollPos = $('#bms_messages').offset().bottom;
448
+
449
+ にする事で、最下部に移動する事が出来ました。
450
+
451
+ scrollPosの値を確認すると、undefinedとあり、ちゃんと値が出ないのが気になるところですが。。。
452
+
453
+
454
+
455
+
456
+
439
- 後、もう一点確認したい点としては、同じくapp.jsの中の51行目
457
+ もう一点確認したい点としては、同じくapp.jsの中の51行目
440
458
 
441
459
  $('#bms_messages').animate({scrollTop: scrollPos});
442
460
 
@@ -444,6 +462,4 @@
444
462
 
445
463
  が見れるようにしたいのですが、その方法が分かりませんでした。
446
464
 
447
-
448
-
449
- ちらか片方、もしくは両方でご教授いだける事がありましたらご教授いただきたくよろしくお願いします。
465
+ ちらに関して、もし分かる事がありましたらご教授いただきたくよろしくお願いします。

1

直接関係無い部分のコードを削除しました。

2020/04/10 07:41

投稿

T_Furuta
T_Furuta

スコア25

test CHANGED
File without changes
test CHANGED
@@ -6,139 +6,333 @@
6
6
 
7
7
  ソースコードとしては、下記となります。
8
8
 
9
-
10
-
11
- Index.html
9
+ chat.html
12
10
 
13
11
  ```html
14
12
 
15
- <!DOCTYPE HTML>
16
-
17
- <html>
18
-
19
- <head>
20
-
21
- <meta charset="utf-8">
22
-
23
- <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no, viewport-fit=cover">
24
-
25
- <meta http-equiv="Content-Security-Policy" content="default-src * data: gap: https://ssl.gstatic.com; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'">
26
-
27
- <script src="components/loader.js"></script>
28
-
29
- <script src="lib/onsenui/js/onsenui.min.js"></script>
30
-
31
-
32
-
33
- <link rel="stylesheet" href="components/loader.css">
34
-
35
- <link rel="stylesheet" href="lib/onsenui/css/onsenui.css">
36
-
37
- <link rel="stylesheet" href="lib/onsenui/css/onsen-css-components.css">
38
-
39
- <link rel="stylesheet" href="css/style.css">
40
-
41
- <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
42
-
43
- <script src="https://js.pusher.com/5.1/pusher.min.js"></script>
44
-
45
- <script src="js/app.js"></script>
46
-
47
- </head>
48
-
49
- <body>
50
-
51
- <ons-navigator swipeable id="nav" page="login.html"></ons-navigator>
52
-
53
- <template id="login.html">
54
-
55
- <ons-page id="login">
13
+ <ons-page id="chat">
14
+
56
-
15
+ <ons-toolbar>
16
+
57
- <div class="join-area" style="text-align: center; margin-top: 30px;">
17
+ <div class="left"><ons-back-button>Back</ons-back-button></div>
18
+
58
-
19
+ <div class="center"></div>
20
+
21
+ </ons-toolbar>
22
+
23
+ <input type="hidden" id="channelId" />
24
+
25
+ <div id="your_container">
26
+
27
+ <!-- チャットの外側部分① -->
28
+
29
+ <div id="bms_messages_container">
30
+
31
+
32
+
33
+ <!-- タイムライン部分② -->
34
+
35
+ <div id="bms_messages">
36
+
59
- <h4>チャットルームにログインしてください</h4>
37
+ <div id="chats"></div>
60
-
61
- <p>
38
+
62
-
63
- <ons-input id="userName" modifier="underbar" placeholder="ユーザ名" float></ons-input><br />
64
-
65
- <ons-input id="chatId" modifier="underbar" placeholder="chatId" float></ons-input>
66
-
67
- </p>
39
+ </div>
40
+
41
+
42
+
68
-
43
+ <!-- テキストボックス、送信ボタン④ -->
44
+
69
- <p style="margin-top: 30px;">
45
+ <div class="send-area">
46
+
70
-
47
+ <ons-input id="message" placeholder="メッセージ"></ons-input>
48
+
71
- <ons-button onclick="join()">Join</ons-button>
49
+ <ons-button onclick="send()" modifier="quiet">送信</ons-button>
50
+
72
-
51
+ <ons-button onclick="positiondata()" modifier="quiet">位置確認</ons-button>
52
+
73
- </p>
53
+ </div>
74
54
 
75
55
  </div>
76
56
 
57
+ </div>
58
+
77
- </ons-page>
59
+ </ons-page>
78
-
79
- </template>
80
-
81
- </body>
82
-
83
- </html>
84
-
85
-
86
60
 
87
61
  ```
88
62
 
89
-
90
-
91
- chat.html
92
-
93
- ```html
94
-
95
- <ons-page id="chat">
96
-
97
- <ons-toolbar>
98
-
99
- <div class="left"><ons-back-button>Back</ons-back-button></div>
100
-
101
- <div class="center"></div>
102
-
103
- </ons-toolbar>
104
-
105
- <input type="hidden" id="channelId" />
106
-
107
- <div id="your_container">
108
-
109
- <!-- チャットの外側部分① -->
110
-
111
- <div id="bms_messages_container">
112
-
113
-
114
-
115
- <!-- タイムライン部分② -->
116
-
117
- <div id="bms_messages">
118
-
119
- <div id="chats"></div>
120
-
121
- </div>
122
-
123
-
124
-
125
- <!-- テキストボックス、送信ボタン④ -->
126
-
127
- <div class="send-area">
128
-
129
- <ons-input id="message" placeholder="メッセージ"></ons-input>
130
-
131
- <ons-button onclick="send()" modifier="quiet">送信</ons-button>
132
-
133
- <ons-button onclick="positiondata()" modifier="quiet">位置確認</ons-button>
134
-
135
- </div>
136
-
137
- </div>
138
-
139
- </div>
140
-
141
- </ons-page>
63
+ style.css
64
+
65
+ ```CSS
66
+
67
+ /**/
68
+
69
+
70
+
71
+ .send-area {
72
+
73
+ padding: 0 5px;
74
+
75
+ box-sizing: border-box;
76
+
77
+ line-height: 49px;
78
+
79
+ position: fixed;
80
+
81
+ bottom: 0px;
82
+
83
+ width: 100%;
84
+
85
+ border-top: solid 1px #ccc;
86
+
87
+ }
88
+
89
+
90
+
91
+ .send-area ons-input {
92
+
93
+ display: inline-block;
94
+
95
+ position: relative;
96
+
97
+ width: calc(100% - 60px);
98
+
99
+ }
100
+
101
+
102
+
103
+ .send-area input {
104
+
105
+ vertical-align: middle;
106
+
107
+ position: relative;
108
+
109
+ width: 98%;
110
+
111
+ }
112
+
113
+
114
+
115
+ #your_container{
116
+
117
+ /* 高さや幅など、好きな様に設定
118
+
119
+ bms_messages_containerの方で、縦横いっぱいに広がってくれるので、
120
+
121
+ ここで充てた高さと横幅がそのままスタイルになる仕組み */
122
+
123
+
124
+
125
+ height:80%;/*ここはご自由に*/
126
+
127
+ width: 100%;/*ここはご自由に*/
128
+
129
+ }
130
+
131
+ /* チャットの外側部分① */
132
+
133
+ #bms_messages_container{
134
+
135
+ height: 100%;/*your_containerに対して100%になる */
136
+
137
+ width: 100%;/*your_containerに対して100%になる */
138
+
139
+ background-color: #eee;
140
+
141
+ }
142
+
143
+
144
+
145
+ /* タイムライン部分② */
146
+
147
+ #bms_messages {
148
+
149
+ overflow: auto;/* スクロールを効かせつつ、メッセージがタイムラインの外に出ないようにする */
150
+
151
+ height:100%;/*テキストエリアが下に張り付く様にする*/
152
+
153
+ border-right: 1px solid #ddd;
154
+
155
+ border-left: 1px solid #ddd;
156
+
157
+ background-color: #eee;
158
+
159
+ }
160
+
161
+ /* メッセージ全般のスタイル */
162
+
163
+ .bms_message {
164
+
165
+ margin: 0px;
166
+
167
+ padding: 0 14px;/*吹き出しがタイムラインの側面にひっつかない様に隙間を開ける*/
168
+
169
+ font-size: 16px;
170
+
171
+ word-wrap: break-word;/* 吹き出し内で自動で改行 */
172
+
173
+ white-space: normal;/*指定widthに合わせて、文字を自動的に改行*/
174
+
175
+ }
176
+
177
+ .bms_message_box{
178
+
179
+ margin-top: 20px;/*上下の吹き出しがひっつかない様に隙間を入れる*/
180
+
181
+ max-width: 100%;/*文字が長くなった時に吹き出しがタイムラインからはみ出さない様にする*/
182
+
183
+ font-size: 16px;
184
+
185
+ }
186
+
187
+ .bms_message_content{
188
+
189
+ padding: 10px;/*文字や画像(コンテンツ)の外側に隙間を入れる*/
190
+
191
+ }
192
+
193
+ /* メッセージ1(左側) */
194
+
195
+ .bms_left {
196
+
197
+ float: left;/*吹き出しをbms_messagesに対して左寄せ*/
198
+
199
+ line-height: 1.3em;
200
+
201
+ }
202
+
203
+ .bms_left .bms_message_box {
204
+
205
+ color: #fff;/*テキストを白にする*/
206
+
207
+ background: rgb(0, 145, 197);
208
+
209
+ border: 2px solid rgb(0, 145, 197);
210
+
211
+ /* border-radius: 30px 30px 30px 0px; 左下だけ尖らせて吹き出し感を出す*/
212
+
213
+ margin-right: 50px;/*左側の発言だとわかる様に、吹き出し右側に隙間を入れる*/
214
+
215
+ }
216
+
217
+ /* メッセージ2(右側) */
218
+
219
+ .bms_right {
220
+
221
+ float: right;/*吹き出しをbms_messagesに対して右寄せ*/
222
+
223
+ line-height: 1.3em;
224
+
225
+ }
226
+
227
+ .bms_right .bms_message_box {
228
+
229
+ color: #fff;/*テキストを白にする*/
230
+
231
+ background: rgb(0, 154, 87);
232
+
233
+ border: 2px solid rgb(0, 154, 87);
234
+
235
+ /*border-radius: 30px 30px 0px 30px;右下だけ尖らせて吹き出し感を出す*/
236
+
237
+ margin-left: 50px;/*右側の発言だとわかる様に、吹き出し左側に隙間を入れる*/
238
+
239
+ }
240
+
241
+ .bms_right .bms_message_time {
242
+
243
+ margin-left: 50px;/*右側の発言だとわかる様に、吹き出し左側に隙間を入れる*/
244
+
245
+ }
246
+
247
+ /* 回り込みを解除 */
248
+
249
+ .bms_clear {
250
+
251
+ clear: both; /* 左メッセージと右メッセージの回り込み(float)の効果の干渉を防ぐために必要(これが無いと、自分より下のメッセージにfloatが影響する) */
252
+
253
+ }
254
+
255
+
256
+
257
+ /* テキストエリア、送信ボタン④ */
258
+
259
+ #bms_send {
260
+
261
+ background-color:#eee;/*タイムラインの色と同じにする*/
262
+
263
+ border-right: 1px solid #ddd;
264
+
265
+ border-left: 1px solid #ddd;
266
+
267
+ border-bottom: 1px solid #ddd;
268
+
269
+ height: 48px;
270
+
271
+ padding: 4px;
272
+
273
+ }
274
+
275
+ #bms_send_message{
276
+
277
+ width: calc(100% - 75px);/*常に送信ボタンの横幅を引いたサイズに動的に計算*/
278
+
279
+ line-height: 16px;
280
+
281
+ height: 48px;
282
+
283
+ padding: 14px 6px 0px 6px;/*文字がテキストエリアの中心になる様に隙間調整*/
284
+
285
+ border: 1px solid #ccc;
286
+
287
+ border-radius: 4px;/*角丸*/
288
+
289
+ text-align: left;/*文字を左寄せ*/
290
+
291
+ box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.2) inset;/*内側に影を入れてテキストエリアらしくした*/
292
+
293
+ box-sizing: border-box;/*paddingとborderの要素の高さと幅の影響をなくす(要素に高さと幅を含める)*/
294
+
295
+
296
+
297
+ }
298
+
299
+ #bms_send_btn {
300
+
301
+ width: 72px;
302
+
303
+ height: 48px;
304
+
305
+ font-size: 16px;
306
+
307
+ line-height: 3em;
308
+
309
+ float: right;/*bms_sendに対して右寄せ*/
310
+
311
+ color: #fff;
312
+
313
+ font-weight: bold;
314
+
315
+ background: #bcbcbc;
316
+
317
+ text-align: center;/*文字をボタン中央に表示*/
318
+
319
+ border: 1px solid #bbb;
320
+
321
+ border-radius: 4px;/*角丸*/
322
+
323
+ box-sizing: border-box;/*paddingとborderの要素の高さと幅の影響をなくす(要素に高さと幅を含める)*/
324
+
325
+ }
326
+
327
+ #bms_send_btn:hover {
328
+
329
+ background: #13178E; /*マウスポインタを当てた時にアクティブな色になる*/
330
+
331
+ cursor: pointer;/*マウスポインタを当てた時に、カーソルが指の形になる*/
332
+
333
+ }
334
+
335
+
142
336
 
143
337
  ```
144
338
 
@@ -148,321 +342,83 @@
148
342
 
149
343
  ```
150
344
 
345
+
346
+
347
+ function task1(data) {
348
+
349
+ return new Promise(function (resolve, reject) {
350
+
351
+ connectPusher(data.userName, data.chatId);
352
+
151
- // This is a JavaScript file
353
+ loadChat(data.userName, data.chatId);
152
-
153
- let pusher;
354
+
154
-
155
- let ncmb;
156
-
157
- const pusher_key = 'MY_PUSHER_KEY';
355
+ console.log('task1 完了');
158
-
159
- const pusher_cluster = 'MY_PUSHER_CLUSTER';
356
+
160
-
161
- const applicationKey = 'MY_NCMB_APPLICATION_KEY';
162
-
163
- const clientKey = 'MY_NCMB_CLIENT_KEY';
357
+ resolve('task完了');
164
-
165
-
166
-
167
- // グローバル変数の処理
168
-
169
- ons.ready(function() {
170
-
171
- pusher = new Pusher(pusher_key, {
172
-
173
- cluster: pusher_cluster
174
358
 
175
359
  });
176
360
 
361
+
362
+
363
+ };
364
+
365
+
366
+
367
+ // チャット画面を表示したときの処理
368
+
369
+ $(document).on('show', (event) => {
370
+
371
+ if (event.target.id === 'chat') {
372
+
373
+ const data = event.target.data;
374
+
375
+ $('#channelId').val(data.chatId);
376
+
377
+
378
+
379
+ Promise.resolve()
380
+
381
+ .then(task1.bind(this, data))
382
+
383
+ .then(function() {
384
+
177
- ncmb = new NCMB(applicationKey, clientKey);
385
+ return new Promise(function (resolve, reject) {
386
+
387
+ // スクロール位置の取得
388
+
389
+ var scrollPos = $('#bms_messages').offset().top;
390
+
391
+ console.log(scrollPos);
392
+
393
+ $('#bms_messages').animate({scrollTop: scrollPos});
394
+
395
+ resolve('成功');
396
+
397
+ });
398
+
399
+ });
400
+
401
+ }
178
402
 
179
403
  });
180
404
 
181
405
 
182
406
 
407
+
408
+
409
+ const positiondata = () => {
410
+
183
- // 初期表示処理
411
+ // スクロール位置の取得
184
-
185
- $(document).on('init', (event) => {
412
+
186
-
187
- if (event.target.id === 'login') {
188
-
189
- $('#chatId').val('channel');
190
-
191
- const userName = localStorage.getItem('userName');
192
-
193
- if (userName)
194
-
195
- $('#userName').val(userName);
413
+ var scrollPos = $('#bms_messages').scrollTop();
196
-
197
- }
414
+
198
-
199
- });
200
-
201
-
202
-
203
-
204
-
205
- function task1(data) {
206
-
207
- return new Promise(function (resolve, reject) {
208
-
209
- connectPusher(data.userName, data.chatId);
210
-
211
- loadChat(data.userName, data.chatId);
212
-
213
- console.log('task1 完了');
415
+ console.log(scrollPos);
214
-
215
- resolve('task完了');
216
-
217
- });
218
-
219
-
220
416
 
221
417
  };
222
418
 
223
419
 
224
420
 
225
- // チャット画面を表示したときの処理
421
+
226
-
227
- $(document).on('show', (event) => {
228
-
229
- if (event.target.id === 'chat') {
230
-
231
- const data = event.target.data;
232
-
233
- $('#channelId').val(data.chatId);
234
-
235
-
236
-
237
- Promise.resolve()
238
-
239
- .then(task1.bind(this, data))
240
-
241
- .then(function() {
242
-
243
- return new Promise(function (resolve, reject) {
244
-
245
- // スクロール位置の取得
246
-
247
- var scrollPos = $('#bms_messages').offset().top;
248
-
249
- console.log(scrollPos);
250
-
251
- $('#bms_messages').animate({scrollTop: scrollPos});
252
-
253
- resolve('成功');
254
-
255
- });
256
-
257
- });
258
-
259
- }
260
-
261
- });
262
-
263
-
264
-
265
-
266
-
267
- const positiondata = () => {
268
-
269
- // スクロール位置の取得
270
-
271
- var scrollPos = $('#bms_messages').scrollTop();
272
-
273
- console.log(scrollPos);
274
-
275
- };
276
-
277
-
278
-
279
-
280
-
281
-
282
-
283
- // チャット画面から戻った時の処理
284
-
285
- $(document).on('hide', (event) => {
286
-
287
- if (event.target.id === 'chat') {
288
-
289
- pusher.unsubscribe($('#channelId').val());
290
-
291
- }
292
-
293
- });
294
-
295
-
296
-
297
- // チャットルームにログインする処理
298
-
299
- const join = () => {
300
-
301
- const userName = $('#userName').val();
302
-
303
- if (userName === '') {
304
-
305
- ons.notification
306
-
307
- .alert('ユーザ名を決めてください');
308
-
309
- return;
310
-
311
- }
312
-
313
- localStorage.setItem('userName', userName);
314
-
315
- const chatId = $('#chatId').val();
316
-
317
- $('#nav')[0].pushPage('chat.html', {
318
-
319
- data: { userName, chatId }
320
-
321
- })
322
-
323
- }
324
-
325
-
326
-
327
- // Pusherに接続する処理
328
-
329
- const connectPusher = (userName, chatId) => {
330
-
331
- console.log(userName);
332
-
333
- console.log(chatId);
334
-
335
-
336
-
337
- const channel = pusher.subscribe(chatId);
338
-
339
- channel.bind('message', function(data) {
340
-
341
- showChat(userName, data);
342
-
343
- });
344
-
345
- };
346
-
347
-
348
-
349
- // 既存のチャットメッセージを読み込む処理
350
-
351
- const loadChat = (userName, channel) => {
352
-
353
- const Chat = ncmb.DataStore('Chat');
354
-
355
- Chat
356
-
357
- .equalTo('channel', channel)
358
-
359
- .fetchAll()
360
-
361
- .then(chats => {
362
-
363
- for (let chat of chats) {
364
-
365
- showChat(userName, chat);
366
-
367
- }
368
-
369
- });
370
-
371
- }
372
-
373
-
374
-
375
- // メッセージを一つ表示する処理
376
-
377
- const showChat = (userName, data) => {
378
-
379
- if (data.userName == userName) {
380
-
381
- $('#chats').append(`
382
-
383
- <div class="bms_message bms_right">
384
-
385
- <div class="bms_message_box">
386
-
387
- <div class="bms_message_content">
388
-
389
- <div class="bms_message_text">${data.message}</div>
390
-
391
- </div>
392
-
393
- </div>
394
-
395
- </div>
396
-
397
- <div class="bms_clear"></div>`);
398
-
399
- }else{
400
-
401
- $('#chats').append(`
402
-
403
- <div class="bms_message bms_left">
404
-
405
- <div class="bms_message_box">
406
-
407
- <div class="bms_message_content">
408
-
409
- <div class="bms_message_text">${data.message}</div>
410
-
411
- </div>
412
-
413
- </div>
414
-
415
- <div class="bms_message_text">${data.userName}</div>
416
-
417
- </div>
418
-
419
- <div class="bms_clear"></div>`);
420
-
421
- }
422
-
423
- }
424
-
425
-
426
-
427
- // メッセージ送信処理
428
-
429
- const send = () => {
430
-
431
- const message = $('#message').val();
432
-
433
- const userName = localStorage.getItem('userName');
434
-
435
- const channel = $('#channelId').val();
436
-
437
-
438
-
439
- ncmb.Script
440
-
441
- .data({
442
-
443
- userName,
444
-
445
- message,
446
-
447
- channel
448
-
449
- })
450
-
451
- .exec("POST", "push.js")
452
-
453
- .then(function(res){
454
-
455
- $('#message').val('');
456
-
457
- })
458
-
459
- .catch(function(err){
460
-
461
- console.log(err.name + ':' + err.message);
462
-
463
- });
464
-
465
- };
466
422
 
467
423
  ```
468
424