| 1 |
- define(function(e,t,i){"use strict";var s=e("../util"),n=e("../base"),r=s.prefixStyle("transform"),c=function(e){var t=e.stickyElement,i=e.curStickyElement,n=e.xscroll,r=e._,c=n.getPlugin("infinite");if(c){c.userConfig.renderHook.call(self,t,i),t.setAttribute("xs-guid",i.guid),s.addClass(t,i.className);for(var l in i.style)"display"!=l&&"position"!=l&&(t.style[l]=l==r.height?i.style[l]+"px":i.style[l])}else{var o=i.getAttribute("style");t.innerHTML=i.innerHTML,t.className=i.className,o&&t.setAttribute("style",o)}},l=function(e){l.superclass.constructor.call(this,e),this.userConfig=s.mix({stickyRenderTo:void 0,forceSticky:!0,prefix:"xs-sticky-container",stickyRenderFunc:c,zoomType:"y"},e),this.init()};return s.extend(l,n,{init:function(){var e=this,t=e.userConfig;e.xscroll=t.xscroll,e.isY=!("y"!=t.zoomType);return e._={top:e.isY?"top":"left",left:e.isY?"left":"bottom",right:e.isY?"right":"top",height:e.isY?"height":"width",width:e.isY?"width":"height"},e.stickyRenderTo=s.getNode(t.stickyRenderTo),e._handlers=[],e},getStickiesPos:function(){for(var e=this,t=(e.xscroll,e.isInfinite),i=e.isY,n=e._,r=[],c=function(r){var c={};return t?(c[n.top]=i?r._top:r._left,c[n.height]=i?r._height:r._width):(c[n.top]=e.isY?s.getOffsetTop(r):s.getOffsetLeft(r),c[n.height]=e.isY?r.offsetHeight:r.offsetWidth),c},l=0;l<e.stickiesNum;l++){var o=c(e.stickyElements[l]);e._handlers[l]=e._handlers[l]||e.createStickyEl(),o.el=e._handlers[l],o.isRender=!1,r.push(o)}return r},getStickyElements:function(){var e=this,t=e.xscroll,i=(e.userConfig,e.isInfinite,t.getPlugin("infinite"));if(i){var n=[],r=i.__serializedData;for(var c in r){var l=r[c];l&&l.style&&"sticky"==l.style.position&&n.push(l)}return n}return s.getNodes(t.userConfig.stickyElements,t.content)},render:function(e){var t=this,i=t.userConfig,n=t.xscroll;t.isInfinite=!!n.getPlugin("infinite");var r=t._;if(t.stickyElements=t.getStickyElements(),t.stickiesNum=t.stickyElements&&t.stickyElements.length,t.stickiesNum){t.stickyRenderTo||(t.stickyRenderTo=document.createElement("div"),n.renderTo.appendChild(t.stickyRenderTo)),t.stickiesPos=t.getStickiesPos();var c=t.stickyRenderTo;c.style[r.top]=0,c.style[r.left]=0,c.style[r.right]=0,c.style.position=n.userConfig.useOriginScroll?"fixed":"absolute",s.addClass(t.stickyRenderTo,i.prefix),t.stickyHandler(e),t._bindEvt()}},createStickyEl:function(){var e=this,t=document.createElement("div");return t.style.display="none",s.addClass(t,"xs-sticky-handler"),e.stickyRenderTo.appendChild(t),t},_bindEvt:function(){var e=this,t=e.xscroll;t.on("scroll",e.stickyHandler,e)},stickyHandler:function(e){for(var t=this,i=t.xscroll,s=(t.userConfig,t.isY?i.getScrollTop():i.getScrollLeft()),n=t.stickiesPos,c=t._,l=[],o=0,y=n.length;o<y;o++){var a=n[o][c.top];s>a&&l.push(o)}if(!l.length)return t.stickyElement&&(t.stickyElement.style.display="none"),void(t.curStickyIndex=void 0);var d=Math.max.apply(null,l);if(t.curStickyIndex!=d||e){var u=t.curStickyIndex;t.curStickyIndex=d,t.curStickyElement=t.stickyElements[d],t.curStickyPos=n[d],t.stickyElement=t.curStickyPos.el;for(var o=0,y=n.length;o<y;o++)n[o].el.style.display="none";var k={stickyElement:t.stickyElement,curStickyIndex:t.curStickyIndex,prevStickyIndex:u,curStickyPos:t.curStickyPos,isRender:t.curStickyPos.isRender};i.trigger("beforestickychange",k),t._stickyRenderFunc(t),i.trigger("stickychange",k)}var f=0;if(t.stickiesPos[t.curStickyIndex+1]){var h=t.stickiesPos[t.curStickyIndex],g=t.stickiesPos[t.curStickyIndex+1];f=s+h[c.height]>g[c.top]&&s+h[c.height]<g[c.top]+h[c.height]?h[c.height]+s-g[c.top]:0}t.stickyElement.style[r]=t.isY?"translateY(-"+f+"px) translateZ(0)":"translateX(-"+f+"px) translateZ(0)"},_stickyRenderFunc:function(e){var t=this,i=t._,s=t.userConfig.stickyRenderFunc,n=t.curStickyPos.el;t.curStickyPos.isRender||(n.style[i.left]=0,n.style[i.right]=0,s&&s.call(t,e)),n.style.display="block",t.curStickyPos.isRender=!0},destroy:function(){var e=this;e.stickyElements=void 0,e.stickiesNum=void 0,e.stickiesPos=void 0,s.remove(e.stickyElement),e.stickyElement=void 0}}),"object"==typeof i&&i.exports?void(i.exports=l):l});
|