Facebook like jQuery tooltip plugin with a flexible design that’s easy to customize. Implementation is straightforward and is easy to customize, has smooth fade-ins and fade-outs, and even gives you a number of different ways you can use those tooltips (including complex content).
Contents
Download View Demo
Unique Features
- Checks for hover intentTesting for hover intent makes it so that tooltips don’t open the moment your mouse happens to cross an element with a tooltip. Users have to hover over the element for a moment before the tooltip will open. This provides a much smoother user experience.
- Tooltip queuingThe tooltip queue makes it a fundamental rule of the system that there will only ever be one tooltip visible on the screen. When the user moves their cursor to another element with a tooltip, the last tooltip will close gracefully before the next tooltip opens.
Features
- Straightforward implementation
- Simple configuration
- Supports static tooltips as well as tooltips that follow the mouse
- Ability to let users mouse on to the tooltips and interact with their content
- Mouse follow tooltips are constrained to the browser viewport
- Easy customization
- Works with keyboard navigation
- Smooth fade-ins and fade-outs
- Smart placement that (when enabled) will try to keep tooltips inside of the view port
- Multiple instances
- Works on any type of element
- Supports complex content (markup with behavior & events)
- Small footprint (only 6kb minified)
- Actively maintained
- Tooltips that behave like they would in desktop applicationsTooltips should not flicker or be difficult to interact with. Only one tooltip should be visible on the screen at a time. When the cursor moves to another item with a tooltip then the last tooltip should close gracefully before the new one opens.
- Fade-in and fade-outThe tooltips will have smooth fade-in and out cycles instead of abruptly appearing a disappearing. The fade effects will not conflict with any other effects in the document.
- Check for hover intentTooltips should not suddenly appear as soon as your mouse happens to cross the object. They should only open when the cursor hovers over an element for a moment indicating that the user is actively focused on that element.
- Support multiple instancesHave various kinds of tooltips in one document, each with their own settings and content, even with different tooltip divs and styling. All while still preserving the one-tooltip rule and behaving like one instance.
- Totally portableThe plugin does not require any other plugins or extensions to function. There will be no dependencies other than the core jQuery library. The plugin does not require any images, all layout will be entirely CSS based.
- Easy to useDespite all of the complexity involved (timers, animations, multiple instances) the plugin will be dead simple to use, requiring little to no configuration to get running.
- Easy to customizeTooltip layout and functionality should be simple to modify for your own personal touch. Layout should be done entirely with CSS and the plugin will not attach any inline styles other than to control visibility and positioning.
Usage
Running the plugin is about as standard as it gets.
$('.tooltips').powerTip(options);
Where options
is an object with the various settings you want to override (all defined below).
For example, if you want to attach tootips to all elements with the “info” class, and have those tooltip appear above and to the right of those elements you would use the following code:
$('.info').powerTip({
placement: 'ne' // north-east tooltip position
});
Setting tooltip content
Generally, if your tooltips are just plain text then you probably want to set your tooltip text with the HTML title attribute on the elements themselves. This approach is very intuitive and backwards compatible. But there are several ways to specify the content.
Title attribute
The simplest method, as well as the only one that will continue to work for users who have JavaScript disabled in their browsers.
<a href="/some/link" title="This will be the tooltip text.">Some Link</a>
data-powertip
Basically the same as setting the title attribute, but using an HTML5 data attribute. You can set this in the markup or with JavaScript at any time. It only accepts a simple string, but that string can contain markup.
$('#element').data('powertip', 'This will be the <b>tooltip text</b>.');
or
<a href="/some/link" data-powertip="This will be the <b>tooltip text</b>.">Some Link</a>
data-powertipjq
This is a data interface that will accept a jQuery object. You can create a jQuery object containing complex markup (and even events) and attach it to the element via jQuery’s .data()
method at any time.
var tooltip = $('<div>This will be the tooltip text. It even has an onclick event!</div>');
tooltip.on('click', function() { /* ... */ });
$('#element').data('powertipjq', tooltip);
data-powertiptarget
You can specify the ID of an element in the DOM to pull the content from. PowerTip will replicate the markup of that element in the tooltip without modifying or destroying the original.
<div id="myToolTip">
<p><b>Some Title</b></p>
<p>This will be the tooltip text.</p>
<p><a href="#">This link will be in the tooltip as well.</a></p>
</div>
$('#element').data('powertiptarget', 'myToolTip');
Options
The tooltip behavior is determined by a series of options that you can override. You can pass the options as an object directly to the plugin as an argument when you call it. For example:
$('.tips').powerTip({
option1: 'value',
option2: 'value',
option3: 'value'
});
The settings will only apply to those tooltips matched in the selector. This means that you can have different sets of tooltips on the same page with different options. For example:
$('.tips').powerTip(/** options for regular tooltips **/);
$('.specialTips').powerTip(/** options for special tooltips **/);
You can change the default options for all tooltips by setting their values in the $.fn.powerTip.defaults
object before you call powerTip()
. For example:
// change the default tooltip placement to south
$.fn.powerTip.defaults.placement = 's';
$('.tips').powerTip(); // these tips will appear underneath the element
Of course those defaults will be overridden with any options you pass directly to the powerTip()
call.
List of options
Name | Default | Type | Description |
---|---|---|---|
followMouse | false | Boolean | If set to true the tooltip will follow the users mouse cursor. |
mouseOnToPopup | false | Boolean | Allow the mouse to hover on the tooltip. This lets users interact with the content in the tooltip. Only works if followMouse is set to false . |
placement | 'n' | String | Placement location of the tooltip relative to the element it is open for. Values can be n , e , s , w , nw , ne , sw , or se (as in north, east, south, and west). This only matters if followMouse is set to false . |
smartPlacement | false | Boolean | When enabled the plugin will try to keep tips inside the browser view port. If a tooltip would extend outside of the view port then its placement will be changed to an orientation that would be entirely within the current view port. Only applies if followMouse is set to false . |
popupId | 'powerTip' | String | HTML id attribute for the tooltip div. |
offset | 10 | Number | Pixel offset of the tooltip. This will be the offset from the element the tooltip is open for, or from from mouse cursor if followMouse is true . |
fadeInTime | 200 | Number | Tooltip fade-in time in milliseconds. |
fadeOutTime | 100 | Number | Tooltip fade-out time in milliseconds. |
closeDelay | 100 | Number | Time in milliseconds to wait after mouse cursor leaves the element before closing the tooltip. |
intentPollInterval | 100 | Number | Hover intent polling interval in milliseconds. |
intentSensitivity | 7 | Number | Hover intent sensitivity. The tooltip will not open unless the number of pixels the mouse has moved within the intentPollInterval is less than this value. These default values mean that if the mouse cursor has moved 7 or more pixels in 100 milliseconds the tooltip will not open. |