🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML5

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

JavaScript

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1073閲覧

Cannot read property 'addEventListenerr' of null at HTMLDocument.と表示される

tamakok

総合スコア1

HTML5

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

JavaScript

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/01/16 11:13

前提・実現したいこと

スライドショーを実装したい。
JavaScriptを使ってスライドを作っています、
JSを実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

HTML
省略

<script src="1.js"></script>
<link rel="stylesheet" href="css/style.css"> <script src="https://code.iconify.design/1/1.0.7/iconify.min.js"></script>
<div class="container"> <div class="slider"> <img class="active" src="https://source.unsplash.com/gKk9rpyDryU"> <img class="active1" src="https://source.unsplash.com/VFGEhLznjPU"> <img class="active1"src="https://source.unsplash.com/InR-EhiO_js"> </div> <nav class="slider-nav"> <ul> <li class="arrow"> <button class="previous"> <span> <i class="iconify" data-icon="ion-arrow-left-c" data-inline="false"></i> </span> </button> </li> <li class="arrow"> <button class="next"> <span> <i class="iconify" data-icon="ion-arrow-right-c" data-inline="false"></i> </span> </button> </li> </ul> </nav> </div>

ーーーSCSSーーー

  • {
    box-sizing: border-box;
    &::before, &::after {
    box-sizing: border-box;
    }

}
$arrow: #3c376f;
$bg: #fef8f9;

.container {
max-width: 800px;
margin: 0 auto;
padding: 50px;
}

button {
position: relative;
display: inline-block;
cursor: pointer;
outline: none;
border: 0;
vertical-align: middle;
text-decoration: none;
background: transparent;
padding: 20px 5px;
color: $arrow;
font-size: 2rem;
}

button span {
position: relative;
display: inline-block;
transform: translateX(0);
transition: transform 0.3s ease;
}

.previous:hover span {
transform: translateX(-10px) scale(1.2);
}

.next:hover span {
transform: translateX(10px) scale(1.2);
}

.slider-nav ul {
list-style: none;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
}

.slider-nav li {
display: flex;
flex: 2;
text-align: center;
}

img.active {
max-width: 100%;
display: none;
box-shadow: 10px 10px 20px 0 rgba(94,47,59,0.2);
}
.active1 {
max-width: 100%;
display: none;
box-shadow: 10px 10px 20px 0 rgba(94,47,59,0.2);
}

img.active {
display: block;
animation: fadeImg 0.8s;
}

.slider-nav .arrow {
flex: 0 0 15%;
}

.slider-nav a {
flex-basis: 100%;
display: flex;
align-items: center;
}

.slider-nav span {
display: block;
width: 100%;
}

@keyframes fadeImg {
from {
opacity: 0;
}

to {
opacity: 1;
}
}
}

ーーーJSーーーー
const items = document.querySelectorAll('img');
const itemCount = items.length;
const nextItem = document.querySelector('.next');
const previousItem = document.querySelector('.previous');
let count = 0;

function showNextItem() {
items[count].classList.remove('active');

if(count < itemCount - 1) {
count++;
} else {
count = 0;
}

items[count].classList.add('active');
console.log(count);
}

function showPreviousItem() {
items[count].classList.remove('active');

if(count > 0) {
count--;
} else {
count = itemCount - 1;
}

items[count].classList.add('active');
console.log(count);
}

function keyPress(e) {
e = e || window.event;

if (e.keyCode == '37') {
showPreviousItem();
} else if (e.keyCode == '39') {
showNextItem();
}
}

document.addEventListener("DOMContentLoaded",function(){
document.getElementById('slider').addEventListenerr('click', showNextItem)
previousItem.addEventListener('click', showPreviousItem);
document.addEventListener('keydown', keyPress);
});

エラー JavaScript Cannot read property 'addEventListenerr' of null at HTMLDocument.

該当のソースコード

JS

1const items = document.querySelectorAll('img'); 2const itemCount = items.length; 3const nextItem = document.querySelector('.next'); 4const previousItem = document.querySelector('.previous'); 5let count = 0; 6 7function showNextItem() { 8 items[count].classList.remove('active'); 9 10 if(count < itemCount - 1) { 11 count++; 12 } else { 13 count = 0; 14 } 15 16 items[count].classList.add('active'); 17 console.log(count); 18} 19 20function showPreviousItem() { 21 items[count].classList.remove('active'); 22 23 if(count > 0) { 24 count--; 25 } else { 26 count = itemCount - 1; 27 } 28 29 items[count].classList.add('active'); 30 console.log(count); 31} 32 33function keyPress(e) { 34 e = e || window.event; 35 36 if (e.keyCode == '37') { 37 showPreviousItem(); 38 } else if (e.keyCode == '39') { 39 showNextItem(); 40 } 41} 42 43document.addEventListener("DOMContentLoaded",function(){ 44document.getElementById('slider').addEventListenerr('click', showNextItem) 45previousItem.addEventListener('click', showPreviousItem); 46document.addEventListener('keydown', keyPress); 47});

試したこと

調べて見たり、DOMについて調べてみたができなかった。
ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

https://lab.sonicmoov.com/markup/css/image-slider/のコピペでできると書いてあったので利用してみたがうまく実装されない。

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

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

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

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

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

guest

回答1

0

ベストアンサー

JavaScriptを先頭で読み込むと、それより下のHTMLが処理されない状態で実行されます。なので、nextItempreviousItemが見つからずnullになってしまいます。

「JavaScriptの読み込みを最下部で行う」、あるいは「DOMContentLoadedで実行する」といった仕掛けを行いましょう。

投稿2021/01/16 11:25

maisumakun

総合スコア145971

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

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

tamakok

2021/01/17 07:39

ありがとうございます。 無事に実装させることができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問