前提・実現したいこと
JavaScript Calendarを利用してWEBシステムを開発しています。
下記で紹介している内容で、利用していますが、実際にHTML表示される画面は、Javascriptのスクリプトで作られるため、どのように表示内容をカスタマイズすればよいかわかりません。
下記コード(画像)の①、②、③のところに<img>タグを使う等して、画像を表示させたいのですが、どのような方法を使えば可能となるでしょうか?
該当のソースコード
html
1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset='utf-8'/> 5 <link href='../packages/core/main.css' rel='stylesheet'/> 6 <link href='../packages-premium/timeline/main.css' rel='stylesheet'/> 7 <link href='../packages-premium/resource-timeline/main.css' rel='stylesheet'/> 8 <script src='../packages/core/main.js'></script> 9 <script src='../packages-premium/timeline/main.js'></script> 10 <script src='../packages-premium/resource-common/main.js'></script> 11 <script src='../packages-premium/resource-timeline/main.js'></script> 12 <script> 13 14 document.addEventListener('DOMContentLoaded', function () { 15 var calendarEl = document.getElementById('calendar'); 16 17 var calendar = new FullCalendar.Calendar(calendarEl, { 18 plugins: ['interaction', 'resourceTimeline'], 19 now: '2020-02-07', 20 aspectRatio: 1.8, 21 scrollTime: '00:00', 22 header: { 23 left: 'today prev,next', 24 center: 'title', 25 right: 'resourceTimelineMonth,resourceTimelineYear' 26 }, 27 defaultView: 'resourceTimelineMonth', 28 resourceLabelText: 'Rooms', 29 resources: [ 30 {id: 'a', title: 'room A'}, // ①ここで表示される'room A'の左側に画像を表示させたい 31 {id: 'b', title: 'room B'}, // ②ここで表示される'room B'の左側に画像を表示させたい 32 {id: 'c', title: 'room C'}, // ③ここで表示される'room C'の左側に画像を表示させたい 33 ] 34 }); 35 calendar.render(); 36 }); 37 </script> 38 <style> 39 body { 40 margin: 0; 41 padding: 0; 42 font-family: Arial, Helvetica Neue, Helvetica, sans-serif; 43 font-size: 14px; 44 } 45 #calendar { 46 max-width: 900px; 47 margin: 50px auto; 48 } 49 </style> 50</head> 51<body> 52<div id='calendar'></div> 53</body> 54</html> 55
追記①(最初の回答をいただいてからのテストコード)
まずは、回答いただいた内容で画像が表示されるか、テストでコードを加えましたが、うまく動作しません。
<div id='calendar'></div>
のコードが全て表示されなくなってしまいます。
HTML
1<!DOCTYPE html> 2<html> 3<head> 4 <meta charset='utf-8'/> 5 <link href='../packages/core/main.css' rel='stylesheet'/> 6 <link href='../packages-premium/timeline/main.css' rel='stylesheet'/> 7 <link href='../packages-premium/resource-timeline/main.css' rel='stylesheet'/> 8 <script src='../packages/core/main.js'></script> 9 <script src='../packages-premium/timeline/main.js'></script> 10 <script src='../packages-premium/resource-common/main.js'></script> 11 <script src='../packages-premium/resource-timeline/main.js'></script> 12 <script> 13 14 document.addEventListener('DOMContentLoaded', function () { 15 var calendarEl = document.getElementById('calendar'); 16 17 var calendar = new FullCalendar.Calendar(calendarEl, { 18 plugins: ['interaction', 'resourceTimeline'], 19 now: '2020-02-07', 20 aspectRatio: 1.8, 21 scrollTime: '00:00', 22 header: { 23 left: 'today prev,next', 24 center: 'title', 25 right: 'resourceTimelineMonth,resourceTimelineYear' 26 }, 27 defaultView: 'resourceTimelineMonth', 28 resourceLabelText: 'Rooms', 29 resources: [ 30 {id: 'a', title: 'room A'}, // ①ここで表示される'room A'の左側に画像を表示させたい 31 {id: 'b', title: 'room B'}, // ②ここで表示される'room B'の左側に画像を表示させたい 32 {id: 'c', title: 'room C'}, // ③ここで表示される'room C'の左側に画像を表示させたい 33 ], 34 events: [ 35 { 36 id: '1', 37 resourceId: 'a', 38 start: '2020-02-07T02:00:00', 39 end: '2020-02-07T07:00:00', 40 title: 'event 1', 41 imageurl: '../static/logo.png', 42 }, 43 44 ], 45 eventRender: function (info) { 46 // 画像のデータを持っていれば、画像を生成してテキストの後ろに追加 47 if (info.event.extendedProps.imageurl) { 48 let elem = info.el, 49 img = document.createElement('img'); 50 img.src = info.event.extendedProps.imageurl; 51 elem.querySelector('.fc-content').appendChild(img); 52 } 53 }, 54 55 }); 56 calendar.render(); 57 }); 58 </script> 59 <style> 60 body { 61 margin: 0; 62 padding: 0; 63 font-family: Arial, Helvetica Neue, Helvetica, sans-serif; 64 font-size: 14px; 65 } 66 67 #calendar { 68 max-width: 900px; 69 margin: 50px auto; 70 } 71 </style> 72</head> 73<body> 74<div id='calendar'></div> 75</body> 76</html>
コンソールのエラーメッセージ
sample.html:51 Uncaught TypeError: Cannot read property 'appendChild' of null at Calendar.eventRender (sample.html:51) at Calendar.publiclyTrigger (main.js:6981) at main.js:2399 at Array.filter (<anonymous>) at filterSegsViaEls (main.js:2398) at TimelineLaneEventRenderer.FgEventRenderer.renderSegEls (main.js:7820) at TimelineLaneEventRenderer.FgEventRenderer.renderSegs (main.js:7774) at TimelineLane.res [as renderFgEvents] (main.js:3249) at TimelineLane.render (main.js:1793) at TimelineLane.Component.receiveProps (main.js:3957) eventRender @ sample.html:51 Calendar.publiclyTrigger @ main.js:6981 (anonymous) @ main.js:2399 filterSegsViaEls @ main.js:2398 FgEventRenderer.renderSegEls @ main.js:7820 FgEventRenderer.renderSegs @ main.js:7774 res @ main.js:3249 TimelineLane.render @ main.js:1793 Component.receiveProps @ main.js:3957 ResourceRow.render @ main.js:320 Component.receiveProps @ main.js:3957 ResourceTimelineView.updateRowProps @ main.js:779 ResourceTimelineView.render @ main.js:591 Component.receiveProps @ main.js:3957 CalendarComponent.renderView @ main.js:6304 CalendarComponent.render @ main.js:6168 Component.receiveProps @ main.js:3957 Calendar.renderComponent @ main.js:6831 Calendar.executeRender @ main.js:6805 Calendar.render @ main.js:6631 (anonymous) @ sample.html:56
最初のエラーの、
51 Uncaught TypeError: Cannot read property 'appendChild' of null at Calendar.eventRender (sample.html:51)
51行目のコードは、
elem.querySelector('.fc-content').appendChild(img);
となっています。
補足情報(FW/ツールのバージョンなど)
開発環境
- HTML 5
- JavaScript Calendar v4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/23 09:13
退会済みユーザー
2020/04/23 09:48
退会済みユーザー
2020/04/23 10:16
2020/04/23 10:19
退会済みユーザー
2020/04/23 10:59
2020/04/23 11:10
退会済みユーザー
2020/04/23 11:23
2020/04/23 11:31