模仿bootstrap做的 js tooltip (添加鼠标跟随功能)
主要思路:
使用jquery hover方法,当进入时显示tooltip,移出时隐藏tooltip
当设定为鼠标跟随时,使用mousemove事件显示tooltip
根据tooltip显示位置设置,计算tooltip应显示位置
使用方法:
<span class="ztip" title="hello tooltip">普通Tooltip</span>
<span class="ztip" title="#divInfo">HTML内容</span> (获取divInfo的内容显示)
<span class="ztip ztip-track" title="hello tooltip track">鼠标跟踪Tooltip</span>
<span class="ztip" title="hello tooltip" data-ztip-arrow="top">top</span>
<span class="ztip" title="hello tooltip" data-ztip-arrow="bottom">bottom</span>
<span class="ztip" title="hello tooltip" data-ztip-arrow="left">left</span>
<span class="ztip" title="hello tooltip" data-ztip-arrow="right">right</span>
代码如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>JS tooltip</title>
<style>
/* css style */
body{
width:1000px;
margin:10px auto;
}
.ztip{
color:blue;
}
#ztip{
display:none;
position:absolute;
background-color:#000;
color:#fff;
padding:3px 5px;
font-size:12px;
border-radius:3px;
font-family:"Courier New" consolas;
display: inline-block;
text-align:center;
}
#ztip:after {
content:'';
position: absolute;
width: 0;
height: 0;
border-color: transparent;
border-style: solid;
}
#ztip.top:after {
bottom: 0;
left: 50%;
margin-left: -5px;
margin-bottom: -5px;
border-width: 5px 5px 0;
border-top-color: #000;
}
#ztip.bottom:after {
top: 0;
left: 50%;
margin-left: -5px;
margin-top: -5px;
border-width: 0 5px 5px;
border-bottom-color: #000;
}
#ztip.left:after {
top: 50%;
right: 0;
margin-top: -5px;
margin-right: -5px;
border-width: 5px 0 5px 5px;
border-left-color: #000;
}
#ztip.right:after {
top: 50%;
left: 0;
margin-top: -5px;
margin-left: -5px;
border-width: 5px 5px 5px 0;
border-right-color: #000;
}
#ztip.track{
text-align:left;
}
#ztip.track:after {
display:none;
}
</style>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<h1 style="text-align:center;">JS tooltip</h1> <div>
Tight pants next level keffiyeh you probably haven't heard of them.
<span class="ztip" title="#divInfo">HTML内容</span>
booth beard raw denim letterpress vegan messenger bag stumptown.
Farm-to-table seitan, mcsweeney's
<span class="ztip" title="hello tooltip">普通Tooltip</span>
sustainable quinoa 8-bit american apparel have a terry richardson vinyl chambray.
Beard stumptown, cardigans banh mi lomo
<span class="ztip ztip-track" title="hello tooltip track">鼠标跟踪Tooltip</span>
. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really
<span class="ztip" title="hello tooltip" data-ztip-arrow="top">top</span>
<span class="ztip" title="hello tooltip" data-ztip-arrow="bottom">bottom</span>
<span class="ztip" title="hello tooltip" data-ztip-arrow="left">left</span>
<span class="ztip" title="hello tooltip" data-ztip-arrow="right">right</span>
artisan whatever keytar, scenester <br>farm-to-table
<span class="ztip" data-ztip-width="100" title="hello tooltip<br>hello tooltip">折行Tooltip</span>
Austin twitter handle freegan cred raw denim single-origin coffee viral.
</div> <div id="divInfo" style="display:none;">
hello <b>hello</b><br>
<span style="color:red;">红色内容</span>
</div> <script>
$(function(){
var ztipEl = null;
$('.ztip').hover(function(){
// 显示tooltip // 创建显示对象
if (!ztipEl)
{
ztipEl = $('<div id="ztip"></div>');
$('body').append(ztipEl);
} // 获取内容
var tip = $(this).data('ztip');
if (tip == '') return;
if (tip.indexOf('#') === 0)
{
tip = $(tip).html();
}
else
{
tip = tip.replace(/\\n/, '<br>');
tip = tip.replace(/\n/, '<br>');
}
ztipEl.html(tip); // 是否鼠标跟随
if ($(this).hasClass('ztip-track'))
{
ztipEl.addClass('track');
}
else
{
ztipEl.removeClass('track');
var arrowClass = $(this).data('ztip-arrow')||'top';
ztipEl.removeClass('top').removeClass('bottom').removeClass('left').removeClass('right');
ztipEl.addClass(arrowClass);
var top = 0, left = 0;
if (arrowClass == 'top')
{
top = $(this).offset().top - ztipEl.outerHeight() - 5;
left = $(this).offset().left + $(this).width() / 2 - ztipEl.outerWidth() / 2;
}
else if (arrowClass == 'bottom')
{
top = $(this).offset().top + $(this).height() + 5;
left = $(this).offset().left + $(this).width() / 2 - ztipEl.outerWidth() / 2;
}
else if (arrowClass == 'left')
{
top = $(this).offset().top + $(this).height() / 2 - ztipEl.outerHeight() / 2;
left = $(this).offset().left - ztipEl.outerWidth() - 5;
}
else if (arrowClass == 'right')
{
top = $(this).offset().top + $(this).height() / 2 - ztipEl.outerHeight() / 2;
left = $(this).offset().left + $(this).width() + 5;
}
ztipEl.css({
'top': Math.round(top) + 'px',
'left': Math.round(left) + 'px',
});
ztipEl.show();
}
}, function(){
// 隐藏
ztipEl.hide();
}).mousemove(function(e){
// 跟随鼠标移动
if (!ztipEl.hasClass('track')) return;
e = e || window.event;
var x = e.pageX || e.clientX + document.body.scroolLeft;
var y = e.pageY || e.clientY + document.body.scrollTop;
var top = y + 10;
var left = x + 5;
ztipEl.css('top', top + 'px');
ztipEl.css('left', left + 'px');
ztipEl.show();
}).each(function(){
// 获取显示内容,并移除title
$(this).data('ztip', $(this).attr('title'));
$(this).attr('title', '');
});
});
</script> </body>
模仿bootstrap做的 js tooltip (添加鼠标跟随功能)的更多相关文章
- JS框架_(JQuery.js)动画效果鼠标跟随
百度云盘 传送门 密码 :4n9u 火狐浏览器上纯CSS_动画效果鼠标跟随效果: (作者:lily_lcj 传送门) <!DOCTYPE html PUBLIC "-//W3C//DT ...
- JS实现添加至购物车功能
效果图展示: 当将书拖拽至购物车一览时: 首先将页面的基本结构写出来: <!DOCTYPE html> <html lang="en"> <head& ...
- bootstrap table 生成的表格里动态添加HTML元素按钮,JS中添加点击事件,点击没反应---解决办法
bootstraptable中onExpandRow属性---js 方法添加的 html代码,然后给这代码里面的 元素 添加 事件,却获取不该元素.(称之为未来元素),由于是未来的 所以现在没有这个 ...
- bootstrap制作搜索框及添加回车搜索事件
下面是开发中用bootstrap制作的一个搜索框,以及给搜索框添加回车搜索事件的一个小案例. bootstrap制作搜索框及添加回车搜索事件 下面是功能实现的代码: <!DOCTYPE html ...
- Bootstrap 提示工具(Tooltip)插件
一.提示工具(Tooltip)插件根据需求生成内容和标记,默认情况下是把提示工具(tooltip)放在它们的触发元素后面. 有以下两种方式添加提示工具(tooltip): 1.通过data属性:如需添 ...
- bootstrap中popover.js(弹出框)使用总结+案例
bootstrap中popover.js(弹出框)使用总结+案例 *转载请注明出处: 作者:willingtolove: http://www.cnblogs.com/willingtolove/p/ ...
- bootstrap做了一个表格
花了一下午做了一个表格: 大致是这样: 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf ...
- react.js 之 批量添加与删除功能
最近做的CMS需要用到批量添加图片的功能:在添加文件的容器盒子内,有两个内容,分别是:添加按钮与被添加的选择文件组件. 结构分析: 被添加的组件,我们称为:UploadQiNiuFiles(七牛文件上 ...
- js动态添加onload、onresize、onscroll事件(另类方法)
js动态添加onload.onresize.onscroll事件(另类方法) window 的 onload.onresize.onscroll 事件,跟其他的事件不一样,它不能用 attachE ...
随机推荐
- 主席树套树状数组——带修区间第k大zoj2112
主席树带修第k大 https://www.cnblogs.com/Empress/p/4659824.html 讲的非常好的博客 首先按静态第k大建立起一组权值线段树(主席树) 然后现在要将第i个值从 ...
- js object数据类型
1.object数据类型,[可以]认为JavaScript中顶级数据类型.在JavaScript绝大多数 高级类型对象都是object类型 2.如何创建一个object类型对象 1) 通过调用Obje ...
- pyqt win32发送QQ消息
标题应该改为:python+win32发送QQ消息,全程使用python套个pyqt壳. 其实代码来自: http://blog.csdn.net/suzyu12345/article/details ...
- Yii2 console执行定时脚本
为什么要做crontab脚本 我们的项目使用YII2开发,并不是很大的一个电商平台,pv.IP访问量并不是很高,但客户的数据是日积月累已经产生100万条数据了,之前更新订单等数据使用定时脚本直接访问内 ...
- Selenium Webdriver点击事件失效问题
最近在用selenium webdriver时,遇到一个棘手的问题,点击事件有时候会失效,具体原因我也不知道是什么. 但是有两个解决办法,第一,在点击该标签前,先点击它的父标签,也就是点击两次. dr ...
- UOJ#375. 【ZJOI2018】迷宫
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ375.html 题解 首先,我们可以建出一个 k 个点的自动机,第 i 个点表示当前数对 k 取模为 i- ...
- Axure RP 8 软件介绍
介绍 此软件可以用于制作快速原型,也可以绘制中保真原型草图. 应用人群:产品经理.交互设计师.UI设计师.网页设计师. 原型分类:低保真(手绘草图).中保真(使用相关软件绘制出来的).高保真(包含效果 ...
- python文件的路径问题补充上一篇内容
上次的路径问题还没解决就被勒索病毒的木马器给搞了两周多, 拖拖拖到现在又开始纠结路径问题...还是学习能力不足啊... 补充一下路径问题的知识, 毕竟jupyter notebook跟IDE测试的时候 ...
- Kilani and the Game-扩散形式的搜索
Kilani and the Game 思路:这种扩散走法的并且有速度.我们需要一层一层的入队, 而且 根据题目要求 按编号处理 例如q1队列中有 1 1 1 2 2 2 2 3 3 3 3 3 3 ...
- java做图片点击文字验证码
https://blog.csdn.net/qq_27721169/article/details/82769093