diff options
| author | 2020-10-17 09:54:06 +0200 | |
|---|---|---|
| committer | 2020-10-17 09:54:06 +0200 | |
| commit | 6992491f8c5f074e17c34d09553a715425112652 (patch) | |
| tree | 490d635512bea24ab8bb0d001cf3da37fb917187 /pydis_site/static/js | |
| parent | Merge pull request #411 from ks129/voice-gate (diff) | |
| parent | Update font sizing (diff) | |
Merge pull request #381 from python-discord/feat/timeline
100k milestone timeline page
Diffstat (limited to 'pydis_site/static/js')
| -rw-r--r-- | pydis_site/static/js/timeline/main.js | 71 | 
1 files changed, 71 insertions, 0 deletions
| diff --git a/pydis_site/static/js/timeline/main.js b/pydis_site/static/js/timeline/main.js new file mode 100644 index 00000000..a4bf4f31 --- /dev/null +++ b/pydis_site/static/js/timeline/main.js @@ -0,0 +1,71 @@ +(function(){ +  // Vertical Timeline - by CodyHouse.co +	function VerticalTimeline( element ) { +		this.element = element; +		this.blocks = this.element.getElementsByClassName("cd-timeline__block"); +		this.images = this.element.getElementsByClassName("cd-timeline__img"); +		this.contents = this.element.getElementsByClassName("cd-timeline__content"); +		this.offset = 0.8; +		this.hideBlocks(); +	}; + +	VerticalTimeline.prototype.hideBlocks = function() { +		if ( !"classList" in document.documentElement ) { +			return; // no animation on older browsers +		} +		//hide timeline blocks which are outside the viewport +		var self = this; +		for( var i = 0; i < this.blocks.length; i++) { +			(function(i){ +				if( self.blocks[i].getBoundingClientRect().top > window.innerHeight*self.offset ) { +					self.images[i].classList.add("cd-timeline__img--hidden"); +					self.contents[i].classList.add("cd-timeline__content--hidden"); +				} +			})(i); +		} +	}; + +	VerticalTimeline.prototype.showBlocks = function() { +		if ( ! "classList" in document.documentElement ) { +			return; +		} +		var self = this; +		for( var i = 0; i < this.blocks.length; i++) { +			(function(i){ +				if( self.contents[i].classList.contains("cd-timeline__content--hidden") && self.blocks[i].getBoundingClientRect().top <= window.innerHeight*self.offset ) { +					// add bounce-in animation +					self.images[i].classList.add("cd-timeline__img--bounce-in"); +					self.contents[i].classList.add("cd-timeline__content--bounce-in"); +					self.images[i].classList.remove("cd-timeline__img--hidden"); +					self.contents[i].classList.remove("cd-timeline__content--hidden"); +				} +			})(i); +		} +	}; + +	var verticalTimelines = document.getElementsByClassName("js-cd-timeline"), +		verticalTimelinesArray = [], +		scrolling = false; +	if( verticalTimelines.length > 0 ) { +		for( var i = 0; i < verticalTimelines.length; i++) { +			(function(i){ +				verticalTimelinesArray.push(new VerticalTimeline(verticalTimelines[i])); +			})(i); +		} + +		//show timeline blocks on scrolling +		window.addEventListener("scroll", function(event) { +			if( !scrolling ) { +				scrolling = true; +				(!window.requestAnimationFrame) ? setTimeout(checkTimelineScroll, 250) : window.requestAnimationFrame(checkTimelineScroll); +			} +		}); +	} + +	function checkTimelineScroll() { +		verticalTimelinesArray.forEach(function(timeline){ +			timeline.showBlocks(); +		}); +		scrolling = false; +	}; +})(); | 
