javascript 动态创建tip图片提示
前言:
在做前端的项目中,经常看到移动一个小图标上显示这个图标对应的大图的提示,之前的做法是在小图标的位置后面添加一个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图片提示的更多相关文章
- Javascript动态创建 style 节点
有很多提供动态创建 style 节点的方法,但是大多数都仅限于外部的 css 文件.如何能使用程序生成的字符串动态创建 style 节点,我搞了2个小时. 静态外部 css 文件语法: @import ...
- javascript动态创建script标签,加载完成后调用回调
代码如下: var head = document.getElementsByTagName('head')[0]; var script = document.createElement('scri ...
- 利用javascript动态创建表格
//说明:实现功能.原理上文相同.不过这次是利用已有的简单的方法创建行和列,并实现内容行鼠标移入变色功能! 效果图: /*两个方法 1. trNode table.insertRow(-1) ...
- ArcGIS api for javascript——动态创建图层列表
描述 本例循环地图服务里的所有图层并增加每个图层到一个带checkbox的列表,checkbox能设置图层的显示或隐藏.动态创建列表的优势是所有的图层都会包含在列表中,即使服务器管理员删除或增加了图层 ...
- javascript动态创建表格:新增、删除行和列
转载:http://www.cnblogs.com/pato/archive/2009/09/02/1559068.html 利用js来动态创建表格有两种格式,appendChild()和insert ...
- javascript 动态创建表格
<html> <head> <script> function createTable(rows,lines){ this.rows=rows; this.line ...
- JavaScript动态创建script标签并执行js代码
<script> //创建一个script标签 function loadScriptString(code) { var script = document.createElement( ...
- javascript动态创建div循环列表
动态循环加载列表,实现vue中v-for的效果 效果图: 代码: var noApplicationRecord = document.getElementById('noApplicationRec ...
- 用javascript动态创建并提交表单form,表格table
<script> //helper function to create the formfunction getNewSubmitForm(){ var submitForm = doc ...
随机推荐
- VS2013上利用InstallShield2013LimitedEdition/C#生成安装包
1.文件-新建项目-其它项目类型-安装和部署 一開始是没有InstallShield2013LimitedEdition这个软件的.你须要去站点上填写信息而且下载 2.填写信息下载 訪问站点:http ...
- uva10067 Playing with Wheels 【建图+最短路】
题目:option=com_onlinejudge&Itemid=8&page=show_problem&problem=1008">uva10067 Play ...
- 活锁(livelock)
活锁(livelock) 活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败. 活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于 ...
- Java Date API demo
package date; import java.text.DateFormat; import java.util.Calendar; import java.util.Date; /*2015- ...
- Android新浪微博client(七)——ListView图片异步加载、高速缓存
原文出自:方杰|p=193" style="color:rgb(202,0,0); text-decoration:none; font-size:14px; font-famil ...
- Net 一个请求的处理流程
Net 一个请求的处理流程 1.浏览器请求 请求-准备环境-->处理请求 2.Aspnet 环境的创建 客户请求 IIS区分静态文件还是动态文件,静态文件直接文件返回,动态文件通过asp ...
- mysql及powerdesigner的初次使用
原文:mysql及powerdesigner的初次使用 MYSQL的下载与安装: 下载与安装指导教程: http://jingyan.baidu.com/article/597035521d5de28 ...
- 一Flash从入门开发者放弃了成长之路
本文将依照入门.成长.转行三个关键词来讲述作者这些年使用Flash进行项目开发的整个历史过程. 一.入门--開始走上Flash的道路. 和Flash的机缘要从大学时代说起.2005年下半年.学校开设了 ...
- hdu 4115 石头剪子布(2-sat问题)
/* 意甲冠军:石头剪子布,目前已知n周围bob会有什么,对alice限制.供u,v,w:设w=0说明a,b回合必须出的一样 否则,必须不一样.alice假设输一回合就输了,否则就赢了 解: 2-sa ...
- Android开源项目总结
Android开源项目--分类汇总 Android开源项目第一篇--个性化控件(View)篇 包含ListView.ActionBar.Menu.ViewPager.Gallery.GridView. ...