前言:

在做前端的项目中,经常看到移动一个小图标上显示这个图标对应的大图的提示,之前的做法是在小图标的位置后面添加一个div,然后移动到小图标然后显示这个图标的图片!但是这个方法做的时候发现,如果提示图片很多,要控制大图片的定位样式要写好多,很费时,效率也不好!

后来想过利用在小图标的上添加一个自定义属性,js通过读取这个图标的上自定义属性自动创建一个大图的div,而且生成相应的位置!移出小图标还可以删除这个div!

1、实现方式

html结构:

<a href="javascript:;" class="tooltip zmxl" rel="http://cache.zuixiaoyao.com/act/special/yinuo/images/sub/tip1.jpg"></a>

2、js实现

计算元素的绝对位置

unction GetAbsoluteLocation(element) {
if ( arguments.length != 1 || element == null ) {
return null;
}
var offsetTop = element.offsetTop; //获取元素距离父元素顶部的高度
var offsetLeft = element.offsetLeft; //获取元素距离父元素左部的距离
var offsetWidth = element.offsetWidth; //获取元素自身的宽度
var offsetHeight = element.offsetHeight; //获取元素自身的高度
while( element = element.offsetParent ) { //如果有上级元素,继续叠加运算
offsetTop += element.offsetTop;
offsetLeft += element.offsetLeft;
}
return { absoluteTop: offsetTop, absoluteLeft: offsetLeft, offsetWidth: offsetWidth, offsetHeight: offsetHeight }; //返回这个元素的位置对象
}

主体实现

$('.tooltip').each(function(i){
$(this).hover(function(){
var _this = $(this)[0];//当前元素的dom对象
var pos = GetAbsoluteLocation(_this);//计算位置
var div = document.createElement('div');//创建一个div
var p = document.createElement('p');//创建一个p标签
p.innerHTML = '<img src="http://cache.zuixiaoyao.com/act/special/yinuo/images/sub/loading.gif" width="50" height="54"/>';//loading图片
div.appendChild(p);//添加p到div中
div.id = 'pos_h_cread';//给div添加一个ID
div.style.position = 'absolute';
div.style.zIndex = 9999999;
div.style.left = pos.absoluteLeft + 'px';
if($(this).attr('pos') == 'r'){
div.style.left = pos.absoluteLeft - 60 + 'px';
}
div.style.top = (pos.absoluteTop + pos.offsetHeight)+ 'px';
document.body.appendChild(div);
var image = new Image();//创建一个image对象
image.onload = function(){
var _w = this.width;//获取图片的宽度
var _h = this.height;//获取图片的高度
div.innerHTML = '<img src='+ sr_img +' width='+ _w +' height='+ _h +'/>';
};
image.src = $(this).attr('rel');//指定url
var sr_img = image.src;
},function(){
$('#pos_h_cread').remove();
})
});

 3、原生js实现

var tooltip = {
getpos:function(element){
if ( arguments.length != 1 || element == null ) {
return null;
}
var offsetTop = element.offsetTop;
var offsetLeft = element.offsetLeft;
var offsetWidth = element.offsetWidth;
var offsetHeight = element.offsetHeight;
while( element = element.offsetParent ) {
offsetTop += element.offsetTop;
offsetLeft += element.offsetLeft;
}
return { absoluteTop: offsetTop, absoluteLeft: offsetLeft,
offsetWidth: offsetWidth, offsetHeight: offsetHeight };
},
isSelector:function(){
return !! document.querySelector ? true : false;
},
init:function(){
var box = [];
if(this.isSelector()){
box = document.querySelectorAll('.tooltip');
}else{
var a = [];
var elm = document.getElementsByTagName('*');
var _l = elm.length;
for(var i=0;i<_l;i++){
if(/\s*tooltip\s*/.test(elm[i].className)){
a.push(elm[i]);
}
}
box = a;
}
for(var i=0;i< box.length;i++){
box[i].onmouseover = function(){
var _this = this;
var pos = tooltip.getpos(_this);
var div = document.createElement('div');
var p = document.createElement('p');
p.innerHTML = '<img src="http://cache.shumenol.com/act/plugin/tooltip/loading.gif" width="50" height="54"/>';
div.appendChild(p);
div.id = 'pos_h_cread';
div.style.position = 'absolute';
div.style.zIndex = 9999999;
div.style.left = pos.absoluteLeft + 'px';
div.style.top = (pos.absoluteTop + pos.offsetHeight)+ 'px';
document.getElementsByTagName("body")[0].appendChild(div);
var image = new Image();
image.src = _this.getAttribute('rel');
image.src = _this.rel;
var sr_img = image.src;
image.onload = function(){
var _w = this.width;
var _h = this.height;
div.innerHTML = '<img src='+ sr_img +' width='+ _w +' height='+ _h +'/>';
};
image.src = _this.getAttribute('rel');
image.src = _this.rel;
sr_img = image.src;
}
box[i].onmouseout = function(){
var n = document.getElementById('pos_h_cread');
if(n && n.parentNode && n.tagName != 'BODY'){
n.parentNode.removeChild(n);
}
}
}
}
}
tooltip.init();

javascript 动态创建tip图片提示的更多相关文章

  1. Javascript动态创建 style 节点

    有很多提供动态创建 style 节点的方法,但是大多数都仅限于外部的 css 文件.如何能使用程序生成的字符串动态创建 style 节点,我搞了2个小时. 静态外部 css 文件语法: @import ...

  2. javascript动态创建script标签,加载完成后调用回调

    代码如下: var head = document.getElementsByTagName('head')[0]; var script = document.createElement('scri ...

  3. 利用javascript动态创建表格

    //说明:实现功能.原理上文相同.不过这次是利用已有的简单的方法创建行和列,并实现内容行鼠标移入变色功能! 效果图: /*两个方法 1.  trNode  table.insertRow(-1)    ...

  4. ArcGIS api for javascript——动态创建图层列表

    描述 本例循环地图服务里的所有图层并增加每个图层到一个带checkbox的列表,checkbox能设置图层的显示或隐藏.动态创建列表的优势是所有的图层都会包含在列表中,即使服务器管理员删除或增加了图层 ...

  5. javascript动态创建表格:新增、删除行和列

    转载:http://www.cnblogs.com/pato/archive/2009/09/02/1559068.html 利用js来动态创建表格有两种格式,appendChild()和insert ...

  6. javascript 动态创建表格

    <html> <head> <script> function createTable(rows,lines){ this.rows=rows; this.line ...

  7. JavaScript动态创建script标签并执行js代码

    <script> //创建一个script标签 function loadScriptString(code) { var script = document.createElement( ...

  8. javascript动态创建div循环列表

    动态循环加载列表,实现vue中v-for的效果 效果图: 代码: var noApplicationRecord = document.getElementById('noApplicationRec ...

  9. 用javascript动态创建并提交表单form,表格table

    <script> //helper function to create the formfunction getNewSubmitForm(){ var submitForm = doc ...

随机推荐

  1. java类和对象之间的差

    java类和对象之间的差别是一个普遍的问题,刚开始学习java当它来到与类和对象接触.今天就来总结一下它们之间的差异. 先说说class和object差异.事实上,词:object是全部class的父 ...

  2. SSH骨架Struts(1)——Struts执行过程

    收养Struts骨架Web应用,以举例的方式介绍的基本流程. 一.实例 Login.jsp,进行系统登录的页面 <form action="login.do" method= ...

  3. CentOS7 安装NFS SSH免密码登陆

    配置5台虚拟机 ip为192.168.1.160 - 164,使用160作为共享服务器 使用yum安装nfs 以及rpcbind,有很多文章介绍,这里不再赘述 一.启动服务 1.启动rpcbind s ...

  4. Unity3d 镜面反射 vertex and frag Shader源代码

    Unity3d 镜面反射 网上能找到的基本上是固定管道或表面渲染的shader. 特此翻译为顶点.片段渲染的Shader, 本源代码仅仅涉及shader与cs部分. Editor部分使用NGUI绘制的 ...

  5. 3D数学学习笔记——笛卡尔坐标系

    本系列文章由birdlove1987编写.转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/24601215 1.3D数学 ...

  6. 開始开发 Dashboard Widgets,第2章,读书笔记

    文件夹:http://blog.csdn.net/wide288/article/details/40298693 主要内容: widgets 的组成是什么. 怎么创建 info.plist 文件 怎 ...

  7. 快速入门:十分钟学会Python(转)

    初试牛刀 假设你希望学习Python这门语言,却苦于找不到一个简短而全面的入门教程.那么本教程将花费十分钟的时间带你走入Python的大门.本文的内容介于教程(Toturial)和速查手册(Cheat ...

  8. 乘法逆元...Orz

    最近打的几场比赛,都出现了有关逆元的题目,今天就整理了一下... 求乘法逆元的几种方法:http://www.cnblogs.com/james47/p/3871782.html 博文转载链接:htt ...

  9. BZOJ 1010: [HNOI2008]玩具包装toy

    职务地址:http :// www . lydsy . com / JudgeOnline / problem . php ? id = 1010 题目大意:见原题. 算法分析: 设s[i]为c[i] ...

  10. C# 实现对接电信交费易自动缴费 续(winio/winring0 自动填密码)

    原文:C# 实现对接电信交费易自动缴费 续(winio/winring0 自动填密码) 自动填密码大家可能都不莫生,最有名的应该是 按键精灵 只要是一个可以输入的地方都可以能过按键精灵来完成输入.我今 ...