質問事項
JavaScript30という海外のJS勉強サイトで勉強をしている初心者です。
ビデオを見ながら学習をしていますが、"this"というものが出てきて、自分で調べたもののよくわかりませんでした。
以下のコードのthisが何を指しているのか、またどうすればこのコードのthisがどこを指しているのかなど自分で見分けたいので方法などありましたら教えていただけますでしょうか。
また、初心者がthisに関して勉強する場合はどのようにしたらよいのでしょうか。おすすめのサイトや書籍やYoutubeのビデオなどありましたら教えていただけると幸いです。
thisについて参考にした記事などは以下になります。
[https://qiita.com/takkyun/items/c6e2f2cf25327299cf03]
該当のソースコード
javascript
1const panels = document.querySelectorAll(".panel"); 2 3function panelOpen() { 4 this.classList.toggle("open"); 5} 6//ここのthisがどこに当たるのか、またどのようにして見分けるのかなど知りたいです。 7 8panels.forEach(function(panel) { 9 panel.addEventListener("click", panelOpen); 10}); 11 12
HTML
1<!DOCTYPE html> 2<html lang="en"> 3 <head> 4 <meta charset="UTF-8" /> 5 <title>Flex Panels ????</title> 6 <link 7 href="https://fonts.googleapis.com/css?family=Amatic+SC" 8 rel="stylesheet" 9 type="text/css" 10 /> 11 </head> 12 <body> 13 <style> 14 html { 15 box-sizing: border-box; 16 background: #ffc600; 17 font-family: "helvetica neue"; 18 font-size: 20px; 19 font-weight: 200; 20 } 21 22 body { 23 margin: 0; 24 } 25 26 *, 27 *:before, 28 *:after { 29 box-sizing: inherit; 30 } 31 32 .panels { 33 min-height: 100vh; 34 overflow: hidden; 35 display: flex; 36 } 37 38 .panel { 39 background: #6b0f9c; 40 box-shadow: inset 0 0 0 5px rgba(255, 255, 255, 0.1); 41 color: white; 42 text-align: center; 43 align-items: center; 44 /* Safari transitionend event.propertyName === flex */ 45 /* Chrome + FF transitionend event.propertyName === flex-grow */ 46 transition: font-size 0.7s cubic-bezier(0.61, -0.19, 0.7, -0.11), 47 flex 0.7s cubic-bezier(0.61, -0.19, 0.7, -0.11), background 0.2s; 48 font-size: 20px; 49 background-size: cover; 50 background-position: center; 51 flex: 1; 52 justify-content: center; 53 align-items: center; 54 display: flex; 55 flex-direction: column; 56 } 57 58 .panel1 { 59 background-image: url(https://source.unsplash.com/gYl-UtwNg_I/1500x1500); 60 } 61 .panel2 { 62 background-image: url(https://source.unsplash.com/rFKUFzjPYiQ/1500x1500); 63 } 64 .panel3 { 65 background-image: url(https://images.unsplash.com/photo-1465188162913-8fb5709d6d57?ixlib=rb-0.3.5&q=80&fm=jpg&crop=faces&cs=tinysrgb&w=1500&h=1500&fit=crop&s=967e8a713a4e395260793fc8c802901d); 66 } 67 .panel4 { 68 background-image: url(https://source.unsplash.com/ITjiVXcwVng/1500x1500); 69 } 70 .panel5 { 71 background-image: url(https://source.unsplash.com/3MNzGlQM7qs/1500x1500); 72 } 73 74 /* Flex Children */ 75 .panel > * { 76 margin: 0; 77 width: 100%; 78 transition: transform 0.5s; 79 border: solid 1px red; 80 flex: 1 auto; 81 display: flex; 82 justify-content: center; 83 align-items: center; 84 } 85 86 .panel > *:first-child { 87 transform: translateY(-100%); 88 } 89 .panel.open-active > *:first-child { 90 transform: translateY(0); 91 } 92 .panel > *:last-child { 93 transform: translateY(100%); 94 } 95 .panel.open-active > *:last-child { 96 transform: translateY(0); 97 } 98 99 .panel p { 100 text-transform: uppercase; 101 font-family: "Amatic SC", cursive; 102 text-shadow: 0 0 4px rgba(0, 0, 0, 0.72), 0 0 14px rgba(0, 0, 0, 0.45); 103 font-size: 2em; 104 } 105 106 .panel p:nth-child(2) { 107 font-size: 4em; 108 } 109 110 .panel.open { 111 font-size: 40px; 112 flex: 5; 113 } 114 </style> 115 116 <div class="panels"> 117 <div class="panel panel1"> 118 <p>Hey</p> 119 <p>Let's</p> 120 <p>Dance</p> 121 </div> 122 <div class="panel panel2"> 123 <p>Give</p> 124 <p>Take</p> 125 <p>Receive</p> 126 </div> 127 <div class="panel panel3"> 128 <p>Experience</p> 129 <p>It</p> 130 <p>Today</p> 131 </div> 132 <div class="panel panel4"> 133 <p>Give</p> 134 <p>All</p> 135 <p>You can</p> 136 </div> 137 <div class="panel panel5"> 138 <p>Life</p> 139 <p>In</p> 140 <p>Motion</p> 141 </div> 142 </div> 143 144 <script src="index.js"></script> 145 </body> 146</html> 147
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。