sticky.min.js 3.33 KB
Newer Older
Thitichaipun Wutthisak committed
1 2 3 4 5 6 7
/*!
 * Angular Material Design
 * https://github.com/angular/material
 * @license MIT
 * v1.0.5-master-f171fd2
 */
function MdSticky(t,e,n,r,o){function i(t){function o(t,e){e.addClass("_md-sticky-clone");var n={element:t,clone:e};return d.items.push(n),r.nextTick(function(){p.prepend(n.clone)}),m(),function(){d.items.forEach(function(e,n){e.element[0]===t[0]&&(d.items.splice(n,1),e.clone.remove())}),m()}}function i(){d.items.forEach(l),d.items=d.items.sort(function(t,e){return t.top<e.top?-1:1});for(var t,e=p.prop("scrollTop"),n=d.items.length-1;n>=0;n--)if(e>d.items[n].top){t=d.items[n];break}s(t)}function l(t){var e=t.element[0];for(t.top=0,t.left=0,t.right=0;e&&e!==p[0];)t.top+=e.offsetTop,t.left+=e.offsetLeft,e.offsetParent&&(t.right+=e.offsetParent.offsetWidth-e.offsetWidth-e.offsetLeft),e=e.offsetParent;t.height=t.element.prop("offsetHeight");var n=r.floatingScrollbars()?"0":void 0;r.bidi(t.clone,"margin-left",t.left,n),r.bidi(t.clone,"margin-right",n,t.right)}function a(){var t=p.prop("scrollTop"),e=t>(a.prevScrollTop||0);if(a.prevScrollTop=t,0===t)return void s(null);if(e){if(d.next&&d.next.top<=t)return void s(d.next);if(d.current&&d.next&&d.next.top-t<=d.next.height)return void u(d.current,t+(d.next.top-d.next.height-t))}if(!e){if(d.current&&d.prev&&t<d.current.top)return void s(d.prev);if(d.next&&d.current&&t>=d.next.top-d.current.height)return void u(d.current,t+(d.next.top-t-d.current.height))}d.current&&u(d.current,t)}function s(t){if(d.current!==t){d.current&&(u(d.current,null),f(d.current,null)),t&&f(t,"active"),d.current=t;var e=d.items.indexOf(t);d.next=d.items[e+1],d.prev=d.items[e-1],f(d.next,"next"),f(d.prev,"prev")}}function f(t,e){t&&t.state!==e&&(t.state&&(t.clone.attr("sticky-prev-state",t.state),t.element.attr("sticky-prev-state",t.state)),t.clone.attr("sticky-state",e),t.element.attr("sticky-state",e),t.state=e)}function u(t,n){t&&(null===n||void 0===n?t.translateY&&(t.translateY=null,t.clone.css(e.CSS.TRANSFORM,"")):(t.translateY=n,r.bidi(t.clone,e.CSS.TRANSFORM,"translate3d("+t.left+"px,"+n+"px,0)","translateY("+n+"px)")))}var p=t.$element,m=n.throttle(i);c(p),p.on("$scrollstart",m),p.on("$scroll",a);var d;return d={prev:null,current:null,next:null,items:[],add:o,refreshElements:i}}function l(e){var n,r=angular.element("<div>");t[0].body.appendChild(r[0]);for(var o=["sticky","-webkit-sticky"],i=0;i<o.length;++i)if(r.css({position:o[i],top:0,"z-index":2}),r.css("position")==o[i]){n=o[i];break}return r.remove(),n}function c(t){function e(){+r.now()-i>l?(o=!1,t.triggerHandler("$scrollend")):(t.triggerHandler("$scroll"),n.throttle(e))}var o,i,l=200;t.on("scroll touchmove",function(){o||(o=!0,n.throttle(e),t.triggerHandler("$scrollstart")),t.triggerHandler("$scroll"),i=+r.now()})}var a=l();return function(t,e,n){var r=e.controller("mdContent");if(r)if(a)e.css({position:a,top:0,"z-index":2});else{var l=r.$element.data("$$sticky");l||(l=i(r),r.$element.data("$$sticky",l));var c=n||o(e.clone())(t),s=l.add(e,c);t.$on("$destroy",s)}}}goog.provide("ng.material.components.sticky"),goog.require("ng.material.components.content"),goog.require("ng.material.core"),angular.module("material.components.sticky",["material.core","material.components.content"]).factory("$mdSticky",MdSticky),MdSticky.$inject=["$document","$mdConstant","$$rAF","$mdUtil","$compile"],ng.material.components.sticky=angular.module("material.components.sticky");