模仿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 ...
随机推荐
- Flask简介&入门
1 了解框架 Flask作为Web框架,它的作用主要是为了开发Web应用程序.那么我们首先来了解下Web应用程序.Web应用程序 (World Wide Web)诞生最初的目的,是为了利用互联网交流工 ...
- 初探 Liunx 的命令模式(一)
1.从 X window 切换到 纯命令模式 Ctrl+Alt+[F2-F6].切换回来 Ctrl+Alt+[F2-F6]. 2. 1)CentOS Linux 7 (Core)代表 Linux d ...
- 物化视图(materialized view) 实现数据迁移、数据定时同步
近日公司有一个9i 的Oracle数据库,运行效率低下.想要将其升级到11G. 但是升级之前 要将数据进行同步,好在表不是很多.只有三张表.业务压力也不大,就想到了使用物 化视图的方式将数据同步过来. ...
- line-gradient 之渐变角度
MDN上对于linear-gradient的定义如下: CSS linear-gradient() 函数用于创建一个表示两种或多种颜色线性渐变的图片.其结果属于<gradient>数据类型 ...
- Windows激活最高权限
两种方法激活最高权限 方法1 用鼠标右键点击要操作的文件或文件夹,依次进入"属性→安全→高级→所有者→编辑",在"将所有者更改为"栏中选择登录系统的管理员用户, ...
- 从 Python 快速启动 CGI 服务器
很多人知道 Python 3 可以快速启动一个 HTTP 服务器: $ python3 -m http.server 8000 今天我查阅 http.server 模块发现它支持运行 CGI 脚本,只 ...
- 20175305张天钰Java结对编程四则运算(二)
Java结对编程四则运算(二) 一.题目描述及要求 Git提交粒度不要太粗,建议一个文件/一个类/一个函数/一个功能/一个bug修复都进行提交,不能一天提交一次,更不能一周一次,参考Commit Me ...
- 20165319 Exp6 信息收集与漏洞扫描
实验过程 whois 在虚拟机Kali的终端输入命令:whois gitee.com,查询码云的域名注册信息. dig或nslookup域名查询 在kali终端输入dig 网址或nslookup 网址 ...
- 转载:ac自动机 dp bzoj1030
https://blog.csdn.net/thchuan2001/article/details/57463291
- VScode加文件头的方式
在VScode中添加文件头,设置文件编辑者的方式,在软件中查询到file-header插件: 安装好,此时通过是可以生成默认的文件头.如果需要修改配置,在文件=>首选项=>设置中修改: 查 ...