Hi Guys,
I would like to share how I have implemented directive for tooltip.
Good day :)
I would like to share how I have implemented directive for tooltip.
index.html
<html ng-app="simpleDirective"> <head> <script src="jquery.js"></script> <script src="angular.min.js"></script> <script src="app.js"></script> </head> <body> <div ng-controller="TooltipController"> <div> <input type="text" ng-message-tooltip ng-custom-tooltip ng-message="first"/> </div> <div> <input type="text" ng-message-tooltip ng-custom-tooltip ng-message="second"/> </div> </div> </body> </html>
app.js
var app = angular.module('simpleDirective', []); app.controller("TooltipController", function($scope){ $scope.first = "This is first text box" $scope.second = "This is second text box" }); app.directive("ngMessageTooltip", function($window){ return{ restrict:"A", require:"ngCustomTooltip", link:function($scope, $element, attrs, notificationCtrl){ $element.on("keydown", function(){ notificationCtrl.showMessage($element) }); $element.on("focus, blur", function(){ notificationCtrl.hideTooltip(); }); angular.element($window).bind("resize", function(){ notificationCtrl.showMessage($element); }); } } }); app.directive("ngCustomTooltip", function(){ return{ restrict:"A", scope:{ message:"=ngMessage" }, controller:function($scope){ this.showMessage = function($element){ this.hideTooltip(); var offset = $element.parent().offset(); var tooltip = "<div class='tooltip'><div class='tooltipNotch' style='top:"+(offset.top+14)+"px;left:"+(offset.left+20)+"px'></div>"+ "<div class='tooltipBody' style='top:"+(offset.top+33)+"px;left:"+(offset.left)+"px'>"+$scope.message+"</div></div>"; $("body").append(tooltip); }; this.hideTooltip = function(){ $(".tooltip").remove(); } } } });
Style
.tooltipNotch{ position:absolute; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 10px solid red; border-top: 10px solid transparent; } .tooltipBody{ position: absolute; border: 2px solid red; top: 41px; width: 10em; background: lightsalmon; border-radius: 5px; padding: 5px; } input[type="text"]{ padding:5px; border-radius:5px; border:none; border:1px solid lightgrey; margin-bottom:10px; outline:none; }
Good day :)
0 Comments