在jQuery的帮助下,创建高度可自定义的工具提示框非常容易,可用于装饰页面元素。
介绍我们的想法是将一个函数附加到您想要使用工具提示进行装饰的元素mouseover和mouseout事件中。附加到mouseover事件的函数将创建一个
当然,我们的
- 要显示的消息
- 消退时间
- 背景颜色
- 宽度
- 边框风格
我将首先向您展示该函数的整个代码,然后我将评论我认为有趣的部分。
function AddTooltip(objectId,
message,
fadeAfterMs,
cssBackcolor,
cssWidth,
cssBorder) {
//distance of the tooltip from the cursor
const LEFT_FROM_CURSOR = 30;
const TOP_FROM_CURSOR = 5;
//constants used in the recalculation of left and top
const DISTANCE_FROM_RIGHT_BORDER = 20;
const ADDITIONAL_DISTANCE_FROM_BOTTOM = 50;
const BOX_HEIGHT = 50;
//at the minimum we need the element id and the message
if (objectId && message) {
var $tooltip;
$('#' + objectId).on('mouseover', function (e) {
let left = e.originalEvent.pageX + LEFT_FROM_CURSOR;
let top = e.originalEvent.pageY + TOP_FROM_CURSOR;
//console.log(top);
//console.log(VisibleHeight());
//console.log(window.pageYOffset);
//assigning values from parameters or default values
let width = !cssWidth ? '200px' : cssWidth;
let border = !cssBorder ? '1px solid black' : cssBorder;
let backcolor = !cssBackcolor ? 'aquamarine' : cssBackcolor;
//should the tooltip go over the window border on the right....
if (left + parseInt(width)- window.pageXOffset > VisibleWidth()) {
left = VisibleWidth() - parseInt(width) - DISTANCE_FROM_RIGHT_BORDER;
}
should the tooltip go over the window border on the bottom....
if (top + BOX_HEIGHT - window.pageYOffset> VisibleHeight() ) {
top = top - BOX_HEIGHT;
}
//console.log(top + BOX_HEIGHT + ' ' + VisibleHeight());
//composing the html code for the tooltip div
let s = '' +
message +
'';
//tooltip appended to the body
$tooltip = $(s).appendTo('body');
$tooltip.attr('id', 'ttp-' + objectId);
//fading functionality set here
if (fadeAfterMs && fadeAfterMs > 0) {
setTimeout(Fade, fadeAfterMs);
}
});
$('#' + objectId).on('mouseout', function (e) {
$($tooltip).remove();
});
}
function Fade() {
$($tooltip).fadeOut(2000, function () {
$($tooltip).remove();
});
}
function VisibleWidth() {
return window.innerWidth
|| document.documentElement.clientWidth
|| document.body.clientWidth
|| 0;
}
function VisibleHeight() {
return window.innerHeight
|| document.documentElement.clientHeight
|| document.body.clientHeight
|| 0;
}
}
让我们从函数声明开始:
function AddTooltip(objectId,
message,
fadeAfterMs,
cssBackcolor,
cssWidth,
cssBorder)
正如所料,该函数调用AddTooltip并具有6个参数。第一个是要附加工具提示框的HTML元素id,第二个是要显示的消息。前两个参数是强制性的。没有元素或消息,显示工具提示真的没有意义!最后四个参数是可选的。如果未设置它们,工具提示框的对应属性将采用函数内设置的默认值。
fadeAfterMs参数的类型为Integer,并指定显示工具提示框和淡出工具提示框之间所经过的毫秒数。
其他可选参数属于类型String,需要指定相对属性的CSS值。例如,参数cssWidth的值为' 300px'。
Mouseover函数如果将强制参数传递给函数,则会创建一个将保存对工具提示框的引用的新变量($tooltip),然后将一个函数附加到该mouseover事件。
在此函数内部,计算工具提示框的初始位置,并且某些变量将采用默认值或通过AddTooltip参数传递的值。
if (objectId && message) {
var $tooltip;
$('#' + objectId).on('mouseover', function (e) {
let left = e.originalEvent.pageX + LEFT_FROM_CURSOR;
let top = e.originalEvent.pageY + TOP_FROM_CURSOR;
//assigning values from parameters or default values
let width = !cssWidth ? '200px' : cssWidth;
let border = !cssBorder ? '1px solid black' : cssBorder;
let backcolor = !cssBackcolor ? 'aquamarine' : cssBackcolor;
然后组成包含
let s = '' +
message +
'';
$tooltip = $(s).appendTo('body');
$tooltip.attr('id', 'ttp-' + objectId);
if (fadeAfterMs && fadeAfterMs > 0) {
setTimeout(Fade, fadeAfterMs);
}
这几乎就是该mouseover功能的全部功能。如果添加了工具提示的元素太靠近窗口的右侧,则工具提示框可能会越过窗口并被切断:
我不打算详细解释这个计算是如何工作的。可以说,它涉及到页面滚动和页面可见width的测量:
//should the tooltip go over the window border on the right....
if (left + parseInt(width)- window.pageXOffset > VisibleWidth()) {
left = VisibleWidth() - parseInt(width) - DISTANCE_FROM_RIGHT_BORDER;
}
重新计算top 也是必要的,但不幸的是我们不知道box的height。有办法找到它,但为了保持这一简短,我决定假设box的height绝不会超过50个像素。我不认为这是一个太大的限制,因为盒子应该可视化一个提示,而不是小说!它有助于保持top 简单的计算:
should the tooltip go over the window border on the bottom....
if (top + BOX_HEIGHT - window.pageYOffset> VisibleHeight() ) {
top = top - BOX_HEIGHT;
}
Mouseout函数
这很简单:它只是从删除工具提示:
$('#' + objectId).on('mouseout', function (e) {
$($tooltip).remove();
});
如何使用AddTooltip函数
只需指定元素id和消息!
$(document).ready(function () {
AddTooltip('a-help', 'Do something good....help other people')
AddTooltip('txt-phone', 'In order to avoid phone pranks,
do not give your real number!', 1500, 'pink', '300px')
});
这是它的样子:
原文地址:https://www.codeproject.com/Articles/1276002/Add-tooltips-with-JavaScript-and-jQuery
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?


微信扫码登录