前言:

在做前端的项目中,经常看到移动一个小图标上显示这个图标对应的大图的提示,之前的做法是在小图标的位置后面添加一个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');//创建一个divvar 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添加一个IDdiv.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');//指定urlvar 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();

转载于:https://www.cnblogs.com/shizhouyu/p/4952634.html

javascript 动态创建tip图片提示相关推荐

  1. javascript动态创建可拖动、最大化、最小化的层

    javascript动态创建可拖动.最大化.最小化的层 2010-02-06 13:19 用Javascript实现div层的拖动是很常见的一种操作,比如弹出提示对话框,快捷登录等等.之前用隐藏层的方 ...

  2. QT通过JavaScript动态创建QML对象

    QT通过JavaScript动态创建QML对象 通过JavaScript动态创建QML对象 动态创建对象 动态创建组件 从QML字符串创建对象 维护动态创建的对象 动态删除对象 通过JavaScrip ...

  3. Javascript动态创建SVG圆弧

    Javascript动态创建SVG圆弧 0. 起源 需要做一个展示统计数据(百分比)的小部件,默认情况下该小部件是隐藏的.页面右边放置一个圆形的按钮,当点击按钮时小部件从右边滑出显示. 本着尽可能多的 ...

  4. html表单通过js提交表单提交,JavaScript动态创建form表单并提交的实现方法

    本文实例讲述了JavaScript动态创建form表单并提交的实现方法.分享给大家供大家参考,具体如下: 页面布局有些复杂的情况下,可能需要在页面中动态创建一个 form,JavaScript 创建 ...

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

    利用js来动态创建表格有两种格式,appendChild()和insertRow.insertCell().两种方式其实差不多,但第一种有可能在IE上有问题,所以推荐大家使用第二种了,直接说吧. 1. ...

  6. javascript 动态创建表格:新增、删除行和单元格

    2019独角兽企业重金招聘Python工程师标准>>> 利用js来动态创建表格有两种格式,appendChild()和insertRow.insertCell().两种方式其实差不多 ...

  7. 利用javascript动态创建表格

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

  8. javascript动态创建radio button元素支持IE/Firefox

    我们都知道在IE中创建表单元素可以有三种方式 var oInput = document.createElement("input"); var oInput = document ...

  9. php动态增加div,JavaScript动态创建div等元素实例

    js动态创建div等元素实例 var Test={ createDiv:function(){ var div = document.createElement('div'); div.id=&quo ...

最新文章

  1. Skia的SkCamera.cpp的doUpdate() 算法。
  2. java免安装工具包_Java1.8安装及环境变量配置
  3. 二十年最强悍病毒排行榜
  4. win2008修改远程端口
  5. MockPlus原型设计介绍
  6. OpenShift 4 - DevSecOps (4) - 实现一个 CICD Pipeline,并用 RHACS 发现安全隐患
  7. JavaScript中的函数表达式
  8. ConfigParser.InterpolationSyntaxError: ‘%‘ must be followed by ‘%‘ or ‘(‘, found: “%‘“
  9. oracle数据库静态启动,ORACLE数据库的连接
  10. 架构篇:高可用 Redis 服务架构分析与搭建
  11. make_classification参数
  12. java图书管理系统(MySQL)
  13. 计算力学:显式积分与隐式积分小结
  14. java实习生面试一些技巧
  15. python如何计算平均分_python脚本如何输入成绩求平均分?
  16. Domino V12 Beta新玩法
  17. 数据可视化:科研论文配色
  18. ksh 命令退出状态
  19. 指数函数,幂函数记录
  20. @Scheduled使用及讲解

热门文章

  1. U5398 改数(num)
  2. 零位扩展和符号位扩展
  3. 第8部分 管理磁盘存储
  4. 5.VMware View 4.6安装与部署-安装view agent与模版
  5. 快速启动栏的现实桌面快捷方式
  6. 人生致命的8个经典问题,你也常常犯傻
  7. 安装ORACLE 11.2.0.3 错误
  8. javase阶段总结脑图
  9. Pandas库(2):数据的统计分析
  10. linux(CentOS)下安装mongodb