模仿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 ...
随机推荐
- 2-1、FileBeat入门
FileBeat入门 要开始使用Filebeat设置,请安装并配置相关产品: 用于存储和索引数据的Elasticsearch. 用户界面的Kibana. 用于解析和增强数据的Logstash(可选). ...
- bzoj 2599
还是点对之间的问题,果断上点分治 同样,把一条路径拆分成经过根节点的两条路径,对不经过根节点的路径递归处理 然后,我们逐个枚举根节点的子树,计算出子树中某一点到根节点的距离,然后在之前已经处理过的点中 ...
- 生成免费SSL通配证书
通过Let's Encrypt 生成免费SSL证书 有效期是3个月 1.下载工具certbot-auto wget https://dl.eff.org/certbot-auto chmod +x c ...
- status 返回当前请求的http状态码
status属性返回当前请求的http状态码,此属性仅当数据发送并接收完毕后才可获取.完整的HTTP状态码如下: 100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分 101 ...
- Json的学习
json的简介 Json是项目中常用的一种,数据格式简单,易于读写,格式都是压缩的,占用带宽小,轻量级,支持多种语言,可以直接为服务器代码使用. json常用支持的转化,(map集合,字符串,还有对象 ...
- supervisor 配置程序挂起自启动
使用 supervisor 服务,将程序监控起来,如果程序挂掉了,可以实现自启动 编写 c++ 程序 test.c #include <stdio.h> #include <stri ...
- 展开被 SpringBoot 玩的日子 《 六 》 整合 Mybatis
上次整合了JPA ,但是很多人觉得JPA 并不是那么好用,这都是习惯问题,我本人也比较习惯Mybatis ,所以,今天就整合一下Mybatis,到网上找了一下关于spring boot和mybatis ...
- iOS 上传自己的工程(模块工具类)到cocoapods上遇到坑
最近在研究把自己写的工具类和模块上传到cocoapods上, 再新构建项目中可以直接使用cocoapods使用 也可以更新之前的版本 便于维护项目. 但是在这个过程中遇到了种种问题 但是最后还是解决 ...
- PHP通过get方法获得form表单数据方法总结
下面给大家带来具体的代码示例: 1.form表单代码示例(表单get提交) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 <head> <meta cha ...
- php获取微信基础接口凭证Access_token
php获取微信基础接口凭证Access_token的具体代码,供大家参考,具体内容如下 access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token.开发者需要进 ...