回答編集履歴

2

訂正

2020/09/27 06:28

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

test CHANGED
@@ -70,17 +70,19 @@
70
70
 
71
71
  _splitText( txt ) {
72
72
 
73
- if( !txt || this.textsplit ) return;
73
+ // 返却値 : undefined から innerHTML に訂正
74
74
 
75
- this.textsplit = true;
75
+ if( !txt || this.textsplit ) return this.el.innerHTML;
76
76
 
77
- return txt.trim().split("").reduce((acc, curr) => {
77
+ this.textsplit = true;
78
78
 
79
- curr = curr.replace(/\s+/, ' ');
79
+ return txt.trim().split("").reduce((acc, curr) => {
80
80
 
81
- return `${acc}<span class="char">${curr}</span>`;
81
+ curr = curr.replace(/\s+/, '&nbsp;');
82
82
 
83
+ return `${acc}<span class="char">${curr}</span>`;
84
+
83
- }, "");
85
+ }, "");
84
86
 
85
87
  }
86
88
 

1

追記

2020/09/27 06:28

投稿

AkitoshiManabe
AkitoshiManabe

スコア5434

test CHANGED
@@ -33,3 +33,81 @@
33
33
 
34
34
 
35
35
  * 現在の``TextAnimation`` の実装では不可能です。改修してください。
36
+
37
+
38
+
39
+ ----
40
+
41
+ 追記)
42
+
43
+
44
+
45
+ TextAnimation オブジェクトはアニメーションさせたい1つの要素に紐付ける形をとると判りやすいのではないでしょうか。
46
+
47
+
48
+
49
+ ```javascript
50
+
51
+ class TextAnimation {
52
+
53
+ constructor(el) {
54
+
55
+ if( !el instanceof HTMLElement ) {
56
+
57
+ throw TypeError("required HTMLElement in a argument");
58
+
59
+ }
60
+
61
+ this.textsplit = false; // 分割済みかどうか
62
+
63
+ this.el = el;
64
+
65
+ el.innerHTML = this._splitText( el.textContent );
66
+
67
+ }
68
+
69
+
70
+
71
+ _splitText( txt ) {
72
+
73
+ if( !txt || this.textsplit ) return;
74
+
75
+ this.textsplit = true;
76
+
77
+ return txt.trim().split("").reduce((acc, curr) => {
78
+
79
+ curr = curr.replace(/\s+/, '&nbsp;');
80
+
81
+ return `${acc}<span class="char">${curr}</span>`;
82
+
83
+ }, "");
84
+
85
+ }
86
+
87
+
88
+
89
+ animate() {
90
+
91
+ // 分割されている場合にアニメーション用スタイル '.inview' を適用する
92
+
93
+ if( this.textsplit )
94
+
95
+ this.el.classList.add('inview');
96
+
97
+ }
98
+
99
+ }
100
+
101
+
102
+
103
+ document.querySelectorAll(".animate-title").forEach( el => {
104
+
105
+ let anim = new TextAnimation(el);
106
+
107
+ console.log( anim.el === el );
108
+
109
+ /* omitted */
110
+
111
+ });
112
+
113
+ ```