-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstick8.min.js
4 lines (4 loc) · 3.35 KB
/
stick8.min.js
1
2
3
4
/*! Stick8 - v1.0.0
* http://www.codeandbeauty.com/stick8
* Copyright (c) 2017; * Licensed GPLv2+ */
!function(a,b){"function"==typeof define&&define.amd?define([],b):"object"==typeof module&&module.exports?module.exports=b():a.Stick8=b()}(this,function(){"use strict";var a,b;return a={div:!1,divData:!1,parentData:!1,body:!1,parent:!1,maxTop:0,defaults:{parent:!1,minWidth:0,selector:".flb-box"},init:function(a,b){var c;for(var d in this.defaults)b[d]||(b[d]=this.defaults[d]);b.parent&&(this.parent=document.querySelector(b.parent)),c=this,this.box=a,this.options=b,this.body=document.querySelector("body"),this.initBox(),window.addEventListener("resize",function(){c.reInitBox()})},reInitBox:function(){var a,b;a=this,this.div&&(this.box=this.div.firstChild,this.div.parentElement.appendChild(this.box),this.div.parentElement.removeChild(this.div),this.clone.parentElement.removeChild(this.clone),this.div=!1),this.show(),b=setInterval(function(){clearInterval(b),a.initBox()},300)},initBox:function(){var a,b;a=this.getViewPort(),this.options.minWidth>0&&a.width<=this.options.minWidth||(this.createDiv(),b=this,this.stickOnScroll(),window.addEventListener("scroll",function(){b.stickOnScroll()}))},getData:function(a){var b,c,d,e;return b=a.getBoundingClientRect(),c={width:b.width,height:b.height,top:b.top,left:b.left},d=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop,e=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,c.top+=d,c.left+=e,a.scrollLeft&&(c.width-=a.scrollLeft),a.scrollTop&&(c.height-=a.scrollTop),c},getViewPort:function(){var a,b;return a=document.createElement("div"),a.style.position="fixed",a.style.top=0,a.style.left=0,a.style.width="100%",a.style.height="100%",a.style.margin=0,a.style.padding=0,this.body.appendChild(a),b=this.getData(a),this.body.removeChild(a),{width:parseInt(b.width),height:parseInt(b.height)}},createDiv:function(){if(!this.div){var a,b,c;a=this.getData(this.box),b=document.createElement("div"),b.className="__flb-container",b.style.position="fixed",b.style.width=a.width+"px",b.style.height=a.height+"px",b.style.top=a.top+"px",b.style.left=a.left+"px",c=document.createElement("div"),c.className="__flb-clone",c.style.width=a.width+"px",c.style.height=a.height+"px",this.box.parentElement.insertBefore(c,this.box),this.box.parentElement.insertBefore(b,this.box),b.appendChild(this.box),this.div=b,this.clone=c,this.divData=a,this.parent&&(this.parentData=this.getData(this.parent),this.maxTop=this.parentData.top+this.parentData.height,this.maxTop-=parseInt(a.height)),this.options.onCreate&&this.options.onCreate.call(null,this)}},hide:function(){this.box.style.visibility="hidden"},show:function(){this.box.style.visibility="visible"},stickOnScroll:function(){var a,b,c,d,e;if(a=window.pageYOffset,b=this.divData.top,d=parseInt(this.options.top),this.options.top&&(c=parseInt(this.options.top)-a,c<=0&&(b=this.divData.top-a),b<=d&&(b=d)),this.parent){e=a+(this.options.top?d:this.divData.top),a>0&&e>=this.maxTop&&(b-=e-this.maxTop)}this.div.style.top=b+"px",this.options.onScroll&&this.options.onScroll.call(null,this)}},b=function(b,c){var d,e;e={};for(var f in a)e[f]=a[f];d=setInterval(function(){"complete"===document.readyState&&(clearInterval(d),e.init(b,c))},100)},function(a){a=a||{};var c,d;c=a.selector||".flb-box",d=document.querySelectorAll(c);for(var e=0;e<d.length;e++)new b(d[e],a)}});