課題でプラグインなしでスライダーを作っています。
コードはできているのですが、今のコードをクラス構文に書き直す課題です。
constructorにhtmlエレメントを定義したいのですが、
その場合の引き数をどう定義して良いのか?
メソッドの中にどう書くべきか?
そもそも、constructorにhtmlエレメントを定義するのがダメなのか?
色々試して、consoleにエラーは出ないものの起動もしません。
(同じコードでクラス構文を使わなければ動きます。)
ネットでも同じ例が見つけられなくて、こちらで再び質問しました。
どうぞよろしくお願いします。
Jquery
1let slideNumber = $('.slide').length; 2let slideLarge = $('.slide').width(); 3let slideContentsLarge = slideNumber * slideLarge; 4slideNumber = 0; 5 6class Slider { 7 constructor(slide, slideContainer, contents, animationSpeed, interval){ 8 this.slide = document.getElementById('slider'); 9 this.slideContainer = document.getElementsByClassName('slide-container'); 10 this.contents = document.getElementsByClassName('slide'); 11 this.animationSpeed = animationSpeed; 12 this.interval = interval; 13} //constructor 14 15 16 initSlide(){ 17 18 $(this.contents).css('width', slideLarge); 19 $(this.slideContainer).css({ 20 width: slideContentsLarge, 21 marginLeft: -slideLarge 22 }); 23 24 // On insère la dernière slide au début de la Div.slide-container 25 $('.slide:last-child').prependTo($(this.slideContainer)); 26 27 function moveGauche(){ 28 $(this.contents).animate({'left': slideLarge}, this.animationSpeed, function(){ 29 $('.slide:last-child').prependTo($(this.slideContainer)); 30 $(this.slideContainer).css('left', ''); 31 }); 32 } 33 //next 34 function moveDroite(){ 35 slideNumber++; 36 $(this.slideContainer).animate({'left': -slideLarge}, this.animationSpeed, function(){ 37 $('.slide:first-child').appendTo($(this.slideContainer)); 38 $(this.slideContainer).css('left', ''); 39 }); 40 41} 42setInterval(moveDroite, this.interval); 43} //initSlide() 44 45} //class Slider 46 47const slider = new Slider('slide', 'slideContainer', 'contents', 300, 5000); 48slider.initSlide();
HTML
1<body> 2 <div class="container-fluid"> 3 <section class="row" id="slider"> 4 <div class="col-md-12 slide-container"> 5 <div class="col-md-12 slide" id="slide06"></div> 6 <div class="col-md-12 slide" id="slide01"></div> 7 <div class="col-md-12 slide" id="slide02"></div> 8 <div class="col-md-12 slide" id="slide03"></div> 9 <div class="col-md-12 slide" id="slide04"></div> 10 <div class="col-md-12 slide" id="slide05"></div> 11 </div> 12 <div class="slider-navi"> 13 <a href="#" class="arrow next"><i class="fas fa-arrow-right"></i></a> 14 <a href="#" class="arrow prev"><i class="fas fa-arrow-left"></i></a> 15 </div> 16 <div class="pagination"></div> 17 </section>
CSS
1#slider { 2 height: 500px; 3 width: 85%; 4 position: relative; 5 margin: auto; 6 box-shadow: 0 0 8px #404040; 7} 8 9.slide-view { 10 /*position: relative;*/ 11 overflow: hidden; 12 height: 500px; 13 width: 100%; 14} 15 16.slide-container { 17 width: 600%; 18 height: 100%; 19 display: flex; 20 position: absolute; 21 left: 0; 22} 23 24.slide{ 25 position: relative; 26 width: 100%; 27 height: 500px; 28 color: #fff; 29 /*float: left;*/ 30} 31 32.slide a { 33 display: block; 34} 35 36.slide a:hover { 37 color: #600; 38} 39 40#slide01 { 41 background: linear-gradient(45deg, rgba(24, 24, 24, 0.9) 10%, rgba(255, 255, 255, 0.1) 55%), 42 url(images/bike-414278_1920.jpg) no-repeat 0px -120px; 43} 44 45#slide01 .text-container { 46 color: #fff; 47 top: 20%; 48 left: 50px; 49} 50 51#slide01 .text-container > h2 { 52 font-size: 3em; 53 font-family: 'latobold', Arial, sans-serif; 54} 55 56#slide01 .text-container > h1 { 57 font-size: 1.5em; 58 font-family: 'latoregular', Arial, sans-serif; 59 line-height: 1.5em; 60} 61 62/* slide 02 */ 63#slide02 { 64 background: linear-gradient(rgba(22, 129, 134, 0.7), rgba(22, 129, 134, 0.7)), 65 url(images/bike-414278_1920.jpg); 66} 67 68#slide02 .text-container, 69#slide03 .text-container, 70#slide04 .text-container, 71#slide05 .text-container, 72#slide06 .text-container 73{ 74 margin: 80px auto auto auto; 75 text-align: center; 76 width:70%; 77} 78 79#slide02 .text-container{ 80 margin: 120px auto auto auto; 81} 82 83#slide02 .text-container > h2{ 84 font-size: 2.8em; 85 margin-bottom: 0.6em; 86} 87 88#slide02 .text-container > p{ 89 font-size: 1.4em; 90 line-height: 1.5em; 91 font-family: 'latoregular', sans-serif; 92} 93 94#slide03 .text-container > h3, 95#slide04 .text-container > h3, 96#slide05 .text-container > h3, 97#slide06 .text-container > h3 { 98 font-size: 1.8em; 99 line-height: 1.5em; 100 font-family: 'latoregular', sans-serif; 101} 102 103#slide03 .text-container > p, 104#slide04 .text-container > p, 105#slide05 .text-container > p, 106#slide06 .text-container > p { 107 font-size: 1.2em; 108 border: 1px solid #fff; 109 padding: 5px 3px; 110 margin: 5% auto; 111} 112 113#slide03 .text-container > img, 114#slide04 .text-container > img, 115#slide05 .text-container > img, 116#slide06 .text-container > img { 117 width: 20%; 118 margin-bottom: 0; 119} 120 121 122#slide03 { 123 background: linear-gradient(rgba(119, 178, 82, 0.8), rgba(119, 178, 82, 0.8)), 124 url(images/bike-414278_1920.jpg); 125} 126 127#slide04 { 128 background: 129 linear-gradient(rgba(245, 166, 31, 0.8), rgba(245, 166, 31, 0.8)), 130 url(images/bike-414278_1920.jpg); 131} 132 133#slide05 { 134 background: 135 linear-gradient(rgba(22, 142, 149, 0.8), rgba(22, 142, 149, 0.8)), 136 url(images/bike-414278_1920.jpg); 137} 138 139#slide06 { 140 background: 141 linear-gradient(rgba(142, 119, 182, 0.8), rgba(142, 119, 182, 0.8)), 142 url(images/bike-414278_1920.jpg); 143} 144 145.slider-navi a, 146.pagination a { 147 overflow: hidden; 148} 149 150.slider-navi a.disabled{ 151 display: none; 152} 153 154 155.arrow { 156 z-index: 10; 157 cursor: pointer; 158 position: absolute; 159 top: 45%; 160 color: #FFF; 161 font-size: 1.2em; 162} 163 164.arrow i { 165 color: #D75254; 166 border: solid 1px #D75254; 167 padding: 7px; 168} 169 170.arrow i:hover{ 171 border: solid 1px rgba(255, 255, 255, 0.7); 172 background: rgba(64, 64, 64, 0.5); 173 color: rgba(215,84,82,0.7); 174} 175 176.next { 177 position: absolute; 178 right: -70px; 179} 180 181.prev { 182 position: absolute; 183 left: -70px; 184} 185 186.pagination { 187 position: absolute; 188 bottom: 30px; 189 left: 45%; 190 width: 200px; 191 z-index: 30; 192} 193 194.pagination a { 195 float: left; 196 margin: 5px 5px 0; 197 width: 11px; 198 height: 11px; 199 border-radius: 5px; 200 background: rgba(238, 238, 238, 0.8); 201 vertical-align: middle; 202} 203 204.pagination a.active{ 205 cursor: default; 206 background: rgba(215,84,82,1); 207} 208 209.pagination a.active:before{ 210 margin-left: -130px; 211}
追記:クラス定義を修正したjavascriptコードとクラス名を変更したのでHTMLファイルも再度掲載します。
javaScript
1let slideNumber = $('.contents').length; 2let slideLarge = $('.contents').width(); 3let slideContentsLarge = slideNumber * slideLarge; 4 5console.log(slideNumber); 6console.log(slideLarge); 7console.log(slideContentsLarge); 8 9slideNumber = 0; 10 11class Slider { 12 constructor(slider, slidecontainer, contents, animationSpeed, interval){ 13 this.slide = $("#"+slider); 14 this.slideContainer = $("."+slidecontainer); 15 this.contents = $("."+contents); 16 this.animationSpeed = animationSpeed; 17 this.interval = interval; 18} //constructor 19 20 check(){ 21 console.log($(this.slide).length); 22 console.log($(this.slideContainer).length); 23 console.log($(this.contents).length); 24}; 25 26 initSlide(){ 27 $(this.contents).css('width', slideLarge); 28 $(this.slideContainer).css({ 29 width: slideContentsLarge, 30 marginLeft: -slideLarge 31 }); 32 33 // On insère la dernière slide au début de la Div.slide-container 34 $('.contents:last-child').prependTo($(this.slideContainer)); 35//prev 36 function moveGauche(){ 37 slideNumber--; 38 $(this.slideContainer).animate({'left': slideLarge}, this.animationSpeed, function(){ 39 $('.contents:last-child').prependTo($(this.slideContainer)); 40 $(this.slideContainer).css('left', ''); 41 }); 42 } 43 //next 44 function moveDroite(){ 45 slideNumber++; 46 $(this.slideContainer).animate({'left': -slideLarge}, this.animationSpeed, function(){ 47 $('.contents:first-child').appendTo($(this.slideContainer)); 48 $(this.slideContainer).css('left', ''); 49 }); 50 51} 52setInterval(moveDroite, this.interval); 53} //initSlide() 54 55} //class Slider 56window.addEventListener('DOMContentLoaded', function(e){ 57 const sliderA = new Slider('slider', 'slidecontainer', 'contents', 300, 5000); 58 sliderA.initSlide(); 59 sliderA.check(); 60});
HTML
1<section class="row" id="slider"> 2 <div class="col-md-12 slide-view"> 3 <div class="col-md-12 slidecontainer"> 4 5 <div class="col-md-12 contents" id="slide01"></div> 6 <div class="col-md-12 contents" id="slide02"></div> 7 <div class="col-md-12 contents" id="slide03"></div> 8 <div class="col-md-12 contents" id="slide04"></div> 9 <div class="col-md-12 contents" id="slide05"></div> 10 <div class="col-md-12 contents" id="slide06"></div> 11 12 </div> <!--slidecontainer--> 13 </div> <!--slide-view--> 14</section>
回答3件
あなたの回答
tips
プレビュー