私は現在ES6を学習中です。通常は JQuery プラグインとして記述していたカルーセルを作成しようとしていますが、代わりに ES6 モジュールとして記述して、import キーワードを使用してページの JS に追加できるようにしています。
カルーセルには互いに重なって配置されるスライドがあるため、JS 内で計算が行われ、最も高いカルーセル スライドの高さが決定され、この高さがカルーセルの UL 要素に適用されます。
このモジュールは、すべてのカルーセル要素の含まれる DIV、カルーセル スライドの UL など、コンストラクター内の DOM からいくつかの要素を取得します。
class Carousel {
// set up instance variables
constructor (options) {
this.element = options.element;
this.carousel = options.element.querySelectorAll('ul');
this.carouselSlides = this.carousel[0].children;
this.carouselHeight = 0;
}
resize () {
console.log(this.carouselSlides);
//Get tallest slide
Array.prototype.map.call( this.carouselSlides, ( slide ) => {
this.carouselHeight = (slide.offsetHeight > this.carouselHeight) ? slide.offsetHeight : this.carouselHeight;
});
//Set the height of the carousel to the height of its tallest slide
this.carousel[0].style.height = this.carouselHeight+'px';
}
// initial set up
setup () {
this.resize();
window.onresize = this.resize;
}
}
module.exports = Carousel;
この高さはブラウザの幅が小さくなるにつれて調整する必要があるため、window.onresize でこの計算を行う関数を呼び出そうとしました。
ただし、これは機能しません。コンストラクターで変数に割り当てられた dom ノードが現在の幅と高さでキャッシュされているため、サイズ変更関数が新しい値を計算に使用しないためだと思います。
このキャッシュの問題を防ぐためにコードを調整するにはどうすればよいですか?
以下は、これまでのコードの単純化された Codepen です。(Codepen のためだけにメイン スクリプトに Carousel モジュール コードを追加する必要がありました):
http://codepen.io/decodedcreative/pen/vXzGpE/
ありがとう