From 5f86c0b834e431bdef3e8c9f63f417ba951789af Mon Sep 17 00:00:00 2001 From: Elad Bezalel Date: Tue, 8 Dec 2015 02:28:48 +0200 Subject: [PATCH] fix(tooltip): always append to body and disappear on scroll - Default animation origin has been set to bottom that mean the origin is `top center` --- src/components/tooltip/tooltip.js | 19 +++++++++++++------ src/components/tooltip/tooltip.scss | 1 + 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/components/tooltip/tooltip.js b/src/components/tooltip/tooltip.js index 2e1d3db5648..ec3211d16b2 100644 --- a/src/components/tooltip/tooltip.js +++ b/src/components/tooltip/tooltip.js @@ -58,18 +58,19 @@ function MdTooltipDirective($timeout, $window, $$rAF, $document, $mdUtil, $mdThe var parent = $mdUtil.getParentWithPointerEvents(element), content = angular.element(element[0].getElementsByClassName('md-content')[0]), - current = $mdUtil.getNearestContentElement(element), - tooltipParent = angular.element(current || document.body), + tooltipParent = angular.element(document.body), debouncedOnResize = $$rAF.throttle(function () { updatePosition(); }); + if ($animate.pin) $animate.pin(element, parent); + // Initialize element setDefaults(); manipulateElement(); bindEvents(); - // Default origin transform point is 'left top' - // positionTooltip() is always relative to top left + // Default origin transform point is 'center top' + // positionTooltip() is always relative to center top updateContentOrigin(); configureWatchers(); @@ -81,7 +82,7 @@ function MdTooltipDirective($timeout, $window, $$rAF, $document, $mdUtil, $mdThe } function updateContentOrigin() { - var origin = 'left top'; + var origin = 'center top'; switch (scope.direction) { case 'left' : origin = 'right center'; break; case 'right' : origin = 'left center'; break; @@ -137,7 +138,7 @@ function MdTooltipDirective($timeout, $window, $$rAF, $document, $mdUtil, $mdThe }); attributeObserver.observe(parent[0], { attributes: true}); - }; + } // Store whether the element was focused when the window loses focus. var windowBlurHandler = function() { @@ -145,11 +146,17 @@ function MdTooltipDirective($timeout, $window, $$rAF, $document, $mdUtil, $mdThe }; var elementFocusedOnWindowBlur = false; + function windowScrollHandler() { + setVisible(false); + } + ngWindow.on('blur', windowBlurHandler); ngWindow.on('resize', debouncedOnResize); + document.addEventListener('scroll', windowScrollHandler, true); scope.$on('$destroy', function() { ngWindow.off('blur', windowBlurHandler); ngWindow.off('resize', debouncedOnResize); + document.removeEventListener('scroll', windowScrollHandler, true); attributeObserver && attributeObserver.disconnect(); }); diff --git a/src/components/tooltip/tooltip.scss b/src/components/tooltip/tooltip.scss index 9272f785c48..9d265af2cff 100644 --- a/src/components/tooltip/tooltip.scss +++ b/src/components/tooltip/tooltip.scss @@ -48,6 +48,7 @@ md-tooltip { &.md-show, &.md-show-add-active { transform: scale(1); opacity: 1; + transform-origin: center top; } &.md-show-remove { transition: $swift-ease-out;