JS实现TITLE悬停长久显示效果完整示例


Posted in Javascript onFebruary 11, 2020

本文实例讲述了JS实现TITLE悬停长久显示效果。分享给大家供大家参考,具体如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JS控制TITLE悬停效果</title>
<script type="text/javascript">
/**
 * className 类名
 * tagname HTML标签名,如div,td,ul等
 * @return Array 所有class对应标签对象组成的数组
 * @example
 <div class="abc">abc</div>
 var abc = getClass('abc');
 for(i=0;i<abc.length;i++){
   abc[i].style.backgroundColor='red';
 }
*/
function getClass(className,tagname) {
  //tagname默认值为'*',不能直接写成默认参数方式getClass(className,tagname='*'),否则IE下报错
  if(typeof tagname == 'undefined') tagname = '*';
  if(typeof(getElementsByClassName) == 'function') {
    return getElementsByClassName(className);
  }else {
    var tagname = document.getElementsByTagName(tagname);
    var tagnameAll = [];
    for(var i = 0; i < tagname.length; i++) {
      if(tagname[i].className == className) {
        tagnameAll[tagnameAll.length] = tagname[i];
      }
    }
    return tagnameAll;
  }
}
/**
 * JS字符切割函数
 * @params   string        原字符串
 * @params  words_per_line    每行显示的字符数
 */
function split_str(string,words_per_line) {
  //空串,直接返回
  if(typeof string == 'undefined' || string.length == 0) return '';
  //单行字数未设定,非数值,则取默认值50
  if(typeof words_per_line == 'undefined' || isNaN(words_per_line)){
    words_per_line = 50;
  }
  //格式化成整形值
  words_per_line = parseInt(words_per_line);
  //取出i=0时的字,避免for循环里换行时多次判断i是否为0
  var output_string = string.substring(0,1);
  //循环分隔字符串
  for(var i=1;i<string.length;i++) {
    //如果当前字符是每行显示的字符数的倍数,输出换行
    if(i%words_per_line == 0) {
      output_string += "<br/>";
    }
    //每次拼入一个字符
    output_string += string.substring(i,i+1);
  }
  return output_string;
}
/**
 * 鼠标悬停显示TITLE
 * @params   obj    当前悬停的标签
 *
 */
function titleMouseOver(obj,event,words_per_line) {
  //无TITLE悬停,直接返回
  if(typeof obj.title == 'undefined' || obj.title == '') return false;
  //不存在title_show标签则自动新建
  var title_show = document.getElementById("title_show");
  if(title_show == null){
    title_show = document.createElement("div");              //新建Element
    document.getElementsByTagName('body')[0].appendChild(title_show);  //加入body中
    var attr_id = document.createAttribute('id');            //新建Element的id属性
    attr_id.nodeValue = 'title_show';                  //为id属性赋值
    title_show.setAttributeNode(attr_id);                //为Element设置id属性
    var attr_style = document.createAttribute('style');          //新建Element的style属性
    attr_style.nodeValue = 'position:absolute;'              //绝对定位
      +'border:solid 1px #999999; background:#EDEEF0;'        //边框、背景颜色
      +'border-radius:2px;box-shadow:2px 3px #999999;'        //圆角、阴影
      +'line-height:18px;'                      //行间距
      +'font-size:12px; padding: 2px 5px;';              //字体大小、内间距
    try{
      title_show.setAttributeNode(attr_style);            //为Element设置style属性
    }catch(e){
      //IE6
      title_show.style.position = 'absolute';
      title_show.style.border = 'solid 1px #999999';
      title_show.style.background = '#EDEEF0';
      title_show.style.lineHeight = '18px';
      title_show.style.fontSize = '18px';
      title_show.style.padding = '2px 5px';
    }
  }
  //存储并删除原TITLE
  document.title_value = obj.title;
  obj.title = '';
  //单行字数未设定,非数值,则取默认值50
  if(typeof words_per_line == 'undefined' || isNaN(words_per_line)){
    words_per_line = 50;
  }
  //格式化成整形值
  words_per_line = parseInt(words_per_line);
  //在title_show中按每行限定字数显示标题内容,模拟TITLE悬停效果
  title_show.innerHTML = split_str(document.title_value,words_per_line);
  //显示悬停效果DIV
  title_show.style.display = 'block';
  //根据鼠标位置设定悬停效果DIV位置
  event = event || window.event;              //鼠标、键盘事件
  var top_down = 15;                    //下移15px避免遮盖当前标签
  //最左值为当前鼠标位置 与 body宽度减去悬停效果DIV宽度的最小值,否则将右端导致遮盖
  var left = Math.min(event.clientX,document.body.clientWidth-title_show.clientWidth);
  title_show.style.left = left+"px";      //设置title_show在页面中的X轴位置。
  title_show.style.top = (event.clientY + top_down)+"px";  //设置title_show在页面中的Y轴位置。
}
/**
 * 鼠标离开隐藏TITLE
 * @params  obj    当前悬停的标签
 *
 */
function titleMouseOut(obj) {
  var title_show = document.getElementById("title_show");
  //不存在悬停效果,直接返回
  if(title_show == null) return false;
  //存在悬停效果,恢复原TITLE
  obj.title = document.title_value;
  //隐藏悬停效果DIV
  title_show.style.display = "none";
}
/**
 * 悬停事件绑定
 * @params  objs    所有需要绑定事件的Element
 *
 */
function attachEvent(objs,words_per_line){
  if(typeof objs != 'object') return false;
  //单行字数未设定,非数值,则取默认值50
  if(typeof words_per_line == 'undefined' || isNaN(words_per_line)){
    words_per_line = 50;
  }
  for(i=0;i<objs.length;i++){
    objs[i].onmouseover = function(event){
      titleMouseOver(this,event,words_per_line);
    }
    objs[i].onmouseout = function(event){
      titleMouseOut(this);
    }
  }
}
//初始化,当页面onload的时候,对所有class="title_hover"的标签绑定TITLE悬停事件
window.onload = function(){
  attachEvent(getClass('title_hover'),18);  //行字数设定为18
}
</script>
</head>
<body>
<style>
tr{float:left; margin:0 50px;}
</style>
<table>
  <tr>
    <td title="这个是默认的TITLE这个是默认的TITLE这个是默认的TITLE这个是默认的TITLE这个是默认的TITLE这个是默认的TITLE">鼠标悬停[原生版本]</td>
  </tr>
  <tr>
    <td title="这个是JS实现悬停的TITLE这个是JS实现悬停的TITLE这个是JS实现悬停的TITLE这个是JS实现悬停的TITLE这个是JS实现悬停的TITLE"
    οnmοuseοver="titleMouseOver(this,event,15);" οnmοuseοut="titleMouseOut(this);">鼠标悬停[直接调用函数版本,设定行字数]</td>
  </tr>
  <tr>
    <td class="title_hover" title="ABCTesterABCTesterABCTesterABCTesterABCTesterABCTesterABCTester">鼠标悬停[class控制版本]</td>
  </tr>
  <tr>
    <td title="这个是JS实现悬停的TITLE这个是JS实现悬停的TITLE这个是JS实现悬停的TITLE这个是JS实现悬停的TITLE这个是JS实现悬停的TITLE"
    οnmοuseοver="titleMouseOver(this,event);" οnmοuseοut="titleMouseOut(this);">鼠标悬停[直接调用函数版本,默认行字数]</td>
  </tr>
</table>
</body>
</html>

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试一下运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQuery boxy弹出层插件中文演示及使用讲解
Feb 24 Javascript
在JavaScript中实现类的方式探讨
Aug 28 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
May 11 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
Aug 07 Javascript
安装Node.js并启动本地服务的操作教程
May 12 Javascript
浅谈如何通过node.js对数据进行MD5加密
May 16 Javascript
axios取消请求的实践记录分享
Sep 26 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
Nov 14 Javascript
详解Element 指令clickoutside源码分析
Feb 15 Javascript
JS实现随机抽选获奖者
Nov 07 Javascript
jQuery HTML css()方法与css类实例详解
May 20 jQuery
vue-amap根据地址回显地图并mark的操作
Nov 03 Javascript
vue.config.js中配置Vue的路径别名的方法
Feb 11 #Javascript
vue-resourc发起异步请求的方法
Feb 11 #Javascript
js实现圆形显示鼠标单击位置
Feb 11 #Javascript
JavaScript实现省份城市的三级联动
Feb 11 #Javascript
node.js使用yargs处理命令行参数操作示例
Feb 11 #Javascript
node.js实现http服务器与浏览器之间的内容缓存操作示例
Feb 11 #Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
Feb 11 #Javascript
You might like
PHP中调用ASP.NET的WebService的代码
2011/04/22 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
php基本函数汇总
2015/07/09 PHP
JavaScript 常用函数库详解
2009/10/21 Javascript
js自定义事件代码说明
2011/01/31 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
JS常用字符串处理方法应用总结
2014/05/22 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
js闭包实例汇总
2014/11/09 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
JavaScript中的闭包
2016/02/24 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
解决layui checkbox 提交多个值的问题
2019/09/02 Javascript
[43:24]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.12
2020/12/17 DOTA
详解python调度框架APScheduler使用
2017/03/28 Python
python 判断是否为正小数和正整数的实例
2017/07/23 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
python数据处理之如何选取csv文件中某几行的数据
2019/09/02 Python
享誉全球的多元化时尚精品购物平台:Farfetch发发奇(支持中文)
2017/08/08 全球购物
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
货代行业个人求职简历的自我评价
2013/10/22 职场文书
创新比赛获奖感言
2014/02/13 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
慰问信格式
2015/02/14 职场文书
闪闪的红星观后感
2015/06/08 职场文书
升学宴家长致辞
2015/07/27 职场文书