UNPKG

jquery-scrollspy

Version:

jQuery plugin for accurate scroll position and direction tracking.

2 lines (1 loc) 976 B
const pluginName='scrollSpy';class ScrollSpy{constructor(a,b){this.options=$.extend({},this.defaults,b),this.$el=$(a),this.init()}init(){this.directionX=0,this.directionY=0,this.x=0,this.y=0,this.update()}update(){const a=window.scrollX,b=window.scrollY,c=a>this.x?1:a<this.y?-1:0,d=b>this.y?1:b<this.y?-1:0;(c!==this.directionX||d!==this.directionY)&&this.$el.trigger({directionX:c,directionY:d,x:a,y:b,type:this.options.eventNameDirectionChange}),(a!==this.x||b!==this.y)&&this.$el.trigger({directionX:c,directionY:d,x:a,y:b,type:this.options.eventNameScroll}),this.directionX=c,this.directionY=d,this.x=a,this.y=b,window.requestAnimationFrame(this.update.bind(this))}}ScrollSpy.prototype.defaults={eventNameDirectionChange:'scrollSpy:directionChange',eventNameScroll:'scrollSpy:scroll'},$.fn.scrollSpy=function(a){return this.each((b,c)=>{const d=$(c).data(`plugin_${pluginName}`)||null;d?'string'==typeof a&&d[a]():$(c).data(`plugin_${pluginName}`,new ScrollSpy(c,a))})};