Javascript 多个div的鼠标后的工具提示
我目前有一个网站,其中存在数百个跨度,我需要有工具提示。每个工具提示都包含有关每个跨度的重要信息。把它想象成一个联系人簿,其中每个跨距都是联系人的图像,当您将鼠标悬停在图像上时,他们的姓名/联系人信息就会出现 我有它,所以工具提示跟随你的鼠标,虽然它对我来说很好,但在其他一些计算机上,由于跨度太大,工具提示滞后了很多。工具提示需要几秒钟的时间才能出现,而且非常不稳定。数据大小越小,速度就越快。 我在Javascript中尝试的是:Javascript 多个div的鼠标后的工具提示,javascript,html,css,Javascript,Html,Css,我目前有一个网站,其中存在数百个跨度,我需要有工具提示。每个工具提示都包含有关每个跨度的重要信息。把它想象成一个联系人簿,其中每个跨距都是联系人的图像,当您将鼠标悬停在图像上时,他们的姓名/联系人信息就会出现 我有它,所以工具提示跟随你的鼠标,虽然它对我来说很好,但在其他一些计算机上,由于跨度太大,工具提示滞后了很多。工具提示需要几秒钟的时间才能出现,而且非常不稳定。数据大小越小,速度就越快。 我在Javascript中尝试的是: document.body.addEventListener("
document.body.addEventListener("mousemove", function(e) {
var x = e.clientX,
y = e.clientY;
for(var i = 0; i < document.getElementsByClassName("tooltip-span").length; i++){
document.getElementsByClassName("tooltip-span")[i].style.top = (y + 20) + 'px';
document.getElementsByClassName("tooltip-span")[i].style.left = (x + 10) + 'px';
}
});
document.body.addEventListener(“mousemove”,函数(e){
var x=e.clientX,
y=e.clientY;
对于(var i=0;i
这种滞后是无法忍受的,所以我不确定是否有更好的方法来做到这一点。提前谢谢你的帮助
HTML(我正在使用Vue):
{{item.data.name}
data:{{{item.data.num}
{{item.data.name}
data:{{{item.data.num}
var start=null;
var element=document.getElementById('SomeElementYouWantToAnimate');
功能步骤(时间戳){
如果(!start)start=时间戳;
var progress=时间戳-开始;
element.style.transform='translateX('+Math.min(progress/10200)+'px');
如果(进度<2000年){
window.requestAnimationFrame(步骤);
}
}
window.requestAnimationFrame(步骤);
参考资料:我相信您想要实现的是,如果在项目上有鼠标移动,您将使用
tooltip2
获取span。工具提示span
以跟随您的鼠标
由于您使用的是本机实现,请添加我们在下面使用的最接近的方法
document.body.addEventListener("mousemove", function (e) {
var x = e.clientX, y = e.clientY;
var container = e.target.closest('.tooltip2');
if (container && container.querySelector('.tooltip-span')) {
var target = container.querySelector('.tooltip-span');
target.style.top = (y + 20) + 'px';
target.style.left = (x + 10) + 'px';
}
});
确保在顶部定义最接近的方法
我使用的方法调用与JQuery的想法最接近。我不确定您是否有权访问jQuery,如果您没有使用jQuery,则需要像这样定义最接近的方法
if (window.Element && !Element.prototype.closest) {
Element.prototype.closest =
function(s) {
var matches = (this.document || this.ownerDocument).querySelectorAll(s),
i,
el = this;
do {
i = matches.length;
while (--i >= 0 && matches.item(i) !== el) {};
} while ((i < 0) && (el = el.parentElement));
return el;
};
}
更新2:使用jquery事件委派
$(document.body).on('mousemove', '.tooltip2', function(e) {
$(this).find('.tooltip-span').css({left: e.clientX + 10, top: e.clientY +20});
});
如果没有更多的信息,我无法确定解决问题的最佳方法是什么。但是这里有几件事你可以试着自己解决,以减少延迟:1)只维护一个工具提示元素,并根据鼠标悬停的元素更改该工具提示的数据。2) 您在所有工具提示元素上以线性时间循环,您可能希望查看javascript对象以减少元素的查找时间。当您在主体上移动时,您需要所有跨度的工具提示?是的,我需要每个跨度的工具提示,根据跨度的不同,一次只能出现一个。你也可以发布html吗?我添加了一些html,我的html相当大,所以这只是我使用工具提示的一个例子。我尝试使用这个工具提示,但结果没有什么不同。不过谢谢。好的,我查过了,根据你的结构,你需要最接近的方法来处理这个问题。我已经更新了答案,希望它能起作用。谢谢你的更新,所以你的修复现在可以让它始终显示工具提示,无论发生什么,但我们回到了第一个问题,它太滞后了。显示工具提示大约需要2秒钟。使用jquery或native?使用nativeI?查看您是否有jquery可以尝试其他jquery代码段吗?
if (window.Element && !Element.prototype.closest) {
Element.prototype.closest =
function(s) {
var matches = (this.document || this.ownerDocument).querySelectorAll(s),
i,
el = this;
do {
i = matches.length;
while (--i >= 0 && matches.item(i) !== el) {};
} while ((i < 0) && (el = el.parentElement));
return el;
};
}
$(document.body).mousemove(function(e) {
var x = e.clientX, y = e.clientY;
var container = $(e.target).closest('.tooltip2');
if (container && container.find('.tooltip-span')) {
var target = container.find('.tooltip-span');
target.style.top = (y + 20) + 'px';
target.style.left = (x + 10) + 'px';
}
});
$(document.body).on('mousemove', '.tooltip2', function(e) {
$(this).find('.tooltip-span').css({left: e.clientX + 10, top: e.clientY +20});
});