前言:

在做前端的项目中,经常看到移动一个小图标上显示这个图标对应的大图的提示,之前的做法是在小图标的位置后面添加一个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. Linux 编程学习笔记----命令行参数处理

    转载请注明出处.http://blog.csdn.net/suool/article/details/38089001 问题引入----命令行參数及解析 在使用linux时,与windows最大的不同 ...

  2. iOS一个开发系列中 - UIButton 使用摘要

    // 初始化button并设置类型 UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // 可以定义的UIButto ...

  3. SQLite外键

    数据库工具:SQLite Manager(V0.7.7) SQLite版本号:V3.6.19+ SQLite Manager 默认是不开启外键的. 那么怎样,使用它创建一个带有外键的表呢? 一.开启外 ...

  4. BCP导出导入

    BCP导出导入大容量数据实践   前言 SQL SERVER提供多种不同的数据导出导入的工具,也可以编写SQL脚本,使用存储过程,生成所需的数据文件,甚至可以生成包含SQL语句和数据的脚本文件.各有优 ...

  5. SSH-Struts(两)—调节器(ActionServlet)

    第一部分介绍的博客Struts架构,下一节介绍中特定成分,这个博客是写Struts控制器ActionServlet. 扮演的角色 ActionServlet类是Struts的控制中心,全部来自于浏览器 ...

  6. ASP.NET MVC应用程序展示RDLC报表

    原文:ASP.NET MVC应用程序展示RDLC报表 学习ASP.NET MVC这样久,在学习,练习与应用过程中,觉得很多知识与以前的ASP.NET多有区别,但是实现操作起来,细处又有许多相近的地方. ...

  7. ssh无密码登陆(转)

    [0]写在前面 由于ssh 实现的是免密码登陆,大致步骤是: 0.1) client通过ssh登陆到server: 0.2) server检查家目录下的.ssh文件, 并发送公钥文件 authoriz ...

  8. oracle中execute immediate的使用(select/insert/update/delete)(转)

    execute immediate的语法如下: execute immediate 'sql'; execute immediate 'sql_select' into var_1, var_2; e ...

  9. JS日期显示格式 yyyy-MM-dd hh:mm:ss

     1.字符串转换为日期        Date.parse()       可以把 Date.toString() 和 Date.toUTCString()返回的字符串转换为日期类型 2.日期对象转换 ...

  10. Dynamics CRM2013/2015 禁止欢迎屏幕(Disable the Welcome Screen)

    首先打开Dynamic CRM  2013将有一个欢迎界面的例子,下面的图,它不会为了图检查框出现.OK然后,下一次打开就没有. 可是当我们打开F12开发者工具,清除域的缓存后再次打开CRM,这个欢迎 ...