分享一个我自己写的ToolTip提示插件(附源码)


Posted in Javascript onJanuary 20, 2013

继续分享一个我自己写的 ToolTip提示插件,希望大家支持我,给我点评论,哪怕骂我的也好啊,让我知道有人在关注我“小豆” 嘿嘿。废话不多说上代码!

$.fn.ToolTip = function (option) { 
var defaults = { 
direction: "down", 
star: function () { }, 
from: $(this), 
url: '../images/arrow.png' 
}; 
//方法内基础变量 
var opt = $.extend(defaults, option), 
dirarray = ['up', 'down', 'left', 'right'], 
left = 0, top = 0, _left = 0, _top = 0, arrow_w = 15, arrow_h = 60, timeout, arrow = '0 0'; 
//开始遍历 
$(this).each(function () { 
var obj = $(this); 
obj.on({ 
mouseenter: function () { 
GetPos(obj); 
var objtip = $("<div class='tooltip'></div>").css({ 
position: "absolute", 
top: top, 
left: left, 
border: "solid 1px #ccc", 
width: $("#" + obj.attr("data-tooltip")).outerWidth(true), 
height: $("#" + obj.attr("data-tooltip")).outerHeight(true), 
'border-radius': '8px 8px', 
'background-color': '#fff', 
'z-index': 999 
}).appendTo(obj); 
var objtiphead = $("<div></div>").css({ 
width: arrow_w == 30 ? objtip.outerWidth(true) : 15, 
height: arrow_h == 30 ? objtip.outerHeight(true) : 15, 
position: "absolute", 
top: _top, 
left: _left 
}).appendTo(objtip); 
var objtiparrow = $("<div></div>").css({ 
width: arrow_w, 
height: arrow_h, 
"background-image": "url(" + opt.url + ")", 
"background-repeat": "no-repeat", 
"background-position": arrow 
}).appendTo(objtiphead); 
objtip.append($("#" + obj.attr("data-tooltip")).clone().show()); 
objtip.on({ 
mouseenter: function () { 
obj.data({ 
attip: true 
}); 
}, mouseleave: function () { 
$(".tooltip").remove(); 
obj.removeData("attip"); 
} 
}); 
} 
, mouseleave: function () { 
if (!obj.data("attip")) 
$(".tooltip").remove(); 
obj.removeData("attip"); 
} 
}); 
}); 
//得出位置 
var GetPos = function (obj) { 
var objtip = $("#" + obj.attr("data-tooltip")); 
var tooltippos = { 
up: function () { 
arrow_w = 30; arrow_h = 15; 
top = obj.position().top - 12 - objtip.outerHeight(true); 
left = obj.position().left; 
_top = objtip.outerHeight(true); 
_left = 15; 
arrow = '-50px -50px'; 
}, 
down: function () { 
arrow_w = 30; arrow_h = 15; 
top = obj.position().top + 12 + obj.height(); 
left = obj.position().left; 
_top = -15; 
_left = 15; 
arrow = '-50px 0'; 
}, 
right: function () { 
arrow_w = 15; 
arrow_h = 30; 
top = obj.position().top; 
left = obj.position().left - 12 - objtip.outerWidth(true); 
_top = 15; 
_left = objtip.outerWidth(true); 
arrow = '-80px -20px'; 
}, 
left: function () { 
arrow_w = 15; 
arrow_h = 30; 
top = obj.position().top; 
left = obj.position().left + obj.width() + 12; 
_top = 15; 
_left = -15; 
arrow = '0 -20px'; 
} 
}; 
opt.star(); 
opt.direction = $.inArray(opt.direction, dirarray) != -1 ? opt.direction : "down"; 
switch (opt.direction) { 
case "up": 
if (obj[0].getBoundingClientRect().top - 10 - objtip.outerHeight() > 0) 
tooltippos.up(); 
else 
tooltippos.down(); 
break; 
case "down": 
if (obj[0].getBoundingClientRect().top + 10 + obj.height() + objtip.outerHeight() < $(window).height()) 
tooltippos.down(); 
else 
tooltippos.up(); 
break; 
case "right": 
if (obj[0].getBoundingClientRect().left - 10 - objtip.outerWidth() > 0) 
tooltippos.right(); 
else 
tooltippos.left(); 
break; 
case "left": 
if (obj[0].getBoundingClientRect().left + obj.width() + 10 + objtip.outerWidth() < $(window).width()) 
tooltippos.left(); 
else 
tooltippos.right(); 
} 
} 
}

经测试,好像IE7 箭头有指向错误,大家可以修改下。小问题啦,洒洒水啦~
效果图
分享一个我自己写的ToolTip提示插件(附源码) 
当然,里面是什么内容,那就要自己创造了,我只是写了一个展示div,用法很简单的。
源码下载
操作说明是对用户体验师的侮辱!
Javascript 相关文章推荐
读jQuery之一(对象的组成)
Jun 11 Javascript
引用外部js乱码问题分析及解决方案
Apr 12 Javascript
Json字符串转换为JS对象的高效方法实例
May 01 Javascript
在子窗口中关闭父窗口的一句代码
Oct 21 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
Mar 01 Javascript
微信公众号支付H5调用支付解析
Nov 04 Javascript
vue v-model动态生成详解
Jun 30 Javascript
js取小数点后两位四种方法
Jan 18 Javascript
Vue 权限控制的两种方法(路由验证)
Aug 16 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
Jun 01 Javascript
vue3.0 加载json的方法(非ajax)
Oct 26 Javascript
Antd表格滚动 宽度自适应 不换行的实例
Oct 27 Javascript
使用jQuery.fn自定义jQuery翻页插件
Jan 20 #Javascript
javascript改变position值实现菜单滚动至顶部后固定
Jan 18 #Javascript
js+数组实现网页上显示时间/星期几的实用方法
Jan 18 #Javascript
javascript限制文本框只允许输入数字(曾经与现在的方法对比)
Jan 18 #Javascript
js replace正则表达式应用案例讲解
Jan 17 #Javascript
Javascript模块化编程(三)require.js的用法及功能介绍
Jan 17 #Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
Jan 17 #Javascript
You might like
给海燕B411配件机起死回生配上件
2021/03/02 无线电
PHP调用C#开发的dll类库方法
2014/07/28 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
PHP类型约束用法示例
2016/09/28 PHP
php实现等比例压缩图片
2018/07/26 PHP
使用PHP开发留言板功能
2019/11/19 PHP
Extjs学习笔记之九 数据模型(上)
2010/01/11 Javascript
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
javascript删除数组元素并且数组长度减小的简单实例
2014/02/14 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
js图片轮播效果实现代码
2020/04/18 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
vue+vux实现移动端文件上传样式
2017/07/28 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
bootstrap3中container与container_fluid外层容器的区别讲解
2017/12/04 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
Python通过调用有道翻译api实现翻译功能示例
2018/07/19 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
python 日志模块 日志等级设置失效的解决方案
2020/05/26 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
数据库测试通常都包括哪些方面
2015/11/30 面试题
小学教师办公室制度
2014/02/03 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
父亲节活动策划方案
2014/08/24 职场文书
2019年家电促销广告语集锦
2019/10/21 职场文书
深入理解python多线程编程
2021/04/18 Python
golang switch语句的灵活写法介绍
2021/05/06 Golang
详解thinkphp的Auth类认证
2021/05/28 PHP