前言:

在做前端的项目中,经常看到移动一个小图标上显示这个图标对应的大图的提示,之前的做法是在小图标的位置后面添加一个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. VS2013上利用InstallShield2013LimitedEdition/C#生成安装包

    1.文件-新建项目-其它项目类型-安装和部署 一開始是没有InstallShield2013LimitedEdition这个软件的.你须要去站点上填写信息而且下载 2.填写信息下载 訪问站点:http ...

  2. uva10067 Playing with Wheels 【建图+最短路】

    题目:option=com_onlinejudge&Itemid=8&page=show_problem&problem=1008">uva10067 Play ...

  3. 活锁(livelock)

    活锁(livelock) 活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败. 活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于 ...

  4. Java Date API demo

    package date; import java.text.DateFormat; import java.util.Calendar; import java.util.Date; /*2015- ...

  5. Android新浪微博client(七)——ListView图片异步加载、高速缓存

    原文出自:方杰|p=193" style="color:rgb(202,0,0); text-decoration:none; font-size:14px; font-famil ...

  6. Net 一个请求的处理流程

    Net 一个请求的处理流程   1.浏览器请求 请求-准备环境-->处理请求   2.Aspnet 环境的创建 客户请求 IIS区分静态文件还是动态文件,静态文件直接文件返回,动态文件通过asp ...

  7. mysql及powerdesigner的初次使用

    原文:mysql及powerdesigner的初次使用 MYSQL的下载与安装: 下载与安装指导教程: http://jingyan.baidu.com/article/597035521d5de28 ...

  8. 一Flash从入门开发者放弃了成长之路

    本文将依照入门.成长.转行三个关键词来讲述作者这些年使用Flash进行项目开发的整个历史过程. 一.入门--開始走上Flash的道路. 和Flash的机缘要从大学时代说起.2005年下半年.学校开设了 ...

  9. hdu 4115 石头剪子布(2-sat问题)

    /* 意甲冠军:石头剪子布,目前已知n周围bob会有什么,对alice限制.供u,v,w:设w=0说明a,b回合必须出的一样 否则,必须不一样.alice假设输一回合就输了,否则就赢了 解: 2-sa ...

  10. Android开源项目总结

    Android开源项目--分类汇总 Android开源项目第一篇--个性化控件(View)篇 包含ListView.ActionBar.Menu.ViewPager.Gallery.GridView. ...