JS实现的模仿QQ头像资料卡显示与隐藏效果


Posted in Javascript onApril 07, 2017

本文实例讲述了JS实现的模仿QQ头像资料卡显示与隐藏效果。分享给大家供大家参考,具体如下:

我们使用QQ时经常需要查看朋友的资料卡,当我们把鼠标移入头像时,资料卡显示,并且鼠标能在头像与资料卡之间能随意移动,当鼠标移出头像或资料卡时,资料卡延时隐藏。

实质就是延时提示框问题!

JS实现的模仿QQ头像资料卡显示与隐藏效果

首先写好布局

<style>
    div { float:left; margin:5px; }
    .head { width:50px;height:50px;background-color:pink; }
    .info { width:250px;height:200px;background-color:blue;display:none; }
</style>
<div>
  <div class="head"></div>
  <div class="info"></div>
</div>

其次js部分

思路:

(1)鼠标移入头像,资料卡显示;鼠标移出头像,资料卡延时隐藏setTimeout
(2)鼠标移入资料卡,资料卡仍显示,并清除资料卡延时隐藏的变量
(3)鼠标移出资料卡,资料卡延时隐藏,并且此时如果在移入到头像中,资料卡扔显示,并清除资料卡延时隐藏的变量

window.onload =function(){
    var oHead = document.getElementsByClassName("head")[0];
    var oInfo = document.getElementsByClassName("info")[0];
    var timer = null;
    oHead.onmouseover=function(){
      clearTimeout(timer);
      oInfo.style.display="block";
    };
    oHead.onmouseout=function(){
      timer = setTimeout(function(){
        oInfo.style.display="none";
      },500);
    };
    oInfo.onmouseover=function(){
      clearTimeout(timer);
      oInfo.style.display="block";
    };
    oInfo.onmouseout=function(){
      timer = setTimeout(function(){
        oInfo.style.display="none";
      },500);
    };
};

优化代码:

oInfo.onmouseover = oHead.onmouseover=function(){
  clearTimeout(timer);
  oInfo.style.display="block";
};
oInfo.onmouseout = oHead.onmouseout=function(){
  timer = setTimeout(function(){
    oInfo.style.display="none";
  },500);
};

函数封装:

注意:事件 .xx 等于 [“xx”]

第一种:函数外获取变量,调用函数,适用于一个或两个元素调用此事件

window.onload =function(){
  var oHead = document.getElementsByClassName("head")[0];
  var oInfo = document.getElementsByClassName("info")[0];
  reminder(oHead,oInfo,"onmouseover","onmouseout");
  function reminder (div1,div2,event1,event2){
    var timer = null;
    div1[event1] = div2[event1]=function(){
     clearTimeout(timer);
     div2.style.display="block";
    };
    div1[event2] = div2[event2]=function(){
     timer = setTimeout(function(){
      div2.style.display="none";
     },500);
    };
  }
};

第二种:函数外获取变量,调用函数,适用于多个元素调用此事件

window.onload =function(){
  var number=0;
  reminder("head","info","onmouseover","onmouseout",number);
  function reminder (div1,div2,event1,event2,num){
    var oHead = document.getElementsByClassName(div1)[num];
    var oInfo = document.getElementsByClassName(div2)[num];
    var timer = null;
    oHead[event1] = oInfo[event1]=function(){
     clearTimeout(timer);
     oInfo.style.display="block";
    };
    oHead[event2] = oInfo[event2]=function(){
     timer = setTimeout(function(){
      oInfo.style.display="none";
     },500);
    };
  }
};

比如,一共有三个头像的话,就可以用for循环遍历为每个元素绑定事件:

var number=null;
for(number=0;number<3;number++){
   reminder("head","info","onmouseover","onmouseout",number);
}

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

Javascript 相关文章推荐
JS合并数组的几种方法及优劣比较
Sep 19 Javascript
深入探秘jquery瀑布流的实现
Jan 30 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
Aug 31 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
Oct 18 Javascript
vue组件实例解析
Jan 10 Javascript
jQuery实现文档树效果
Feb 20 Javascript
vue-cli如何添加less 以及sass
Jul 06 Javascript
详解js的作用域、预解析机制
Feb 05 Javascript
Angular6 正则表达式允许输入部分中文字符
Sep 10 Javascript
详解Nuxt内导航栏的两种实现方式
Apr 16 Javascript
微信小程序实现多图上传
Jun 19 Javascript
微信小程序实现翻牌抽奖动画
Sep 21 Javascript
socket.io实现在线群聊功能
Apr 07 #Javascript
JS+HTML5 FileReader对象用法示例
Apr 07 #Javascript
微信小程序实现图片轮播及文件上传
Apr 07 #Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
Apr 07 #Javascript
JS仿Base.js实现的继承示例
Apr 07 #Javascript
vue-hook-form使用详解
Apr 07 #Javascript
ES6实现的遍历目录函数示例
Apr 07 #Javascript
You might like
逆序二维数组插入一元素的php代码
2012/06/08 PHP
PHP中文分词 自动获取关键词介绍
2012/11/13 PHP
php创建多级目录的方法
2015/03/24 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
js实现鼠标感应向下滑动隐藏菜单的方法
2015/02/20 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
AngularJs bootstrap搭载前台框架——准备工作
2016/09/01 Javascript
js设置和获取自定义属性的方法
2016/10/20 Javascript
Bootstrap Table使用整理(三)
2017/06/09 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
JavaScript设计模式之职责链模式应用示例
2018/08/07 Javascript
Vue 实现从文件中获取文本信息的方法详解
2019/10/16 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
实例分析javascript中的异步
2020/06/02 Javascript
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
Python with语句和过程抽取思想
2019/12/23 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
python实现文法左递归的消除方法
2020/05/22 Python
Python3爬虫中Ajax的用法
2020/07/10 Python
python 监控logcat关键字功能
2020/09/04 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
美国最大的高尔夫发球时间预订网站:TeeOff.com
2018/03/28 全球购物
建筑专业自我鉴定
2013/10/22 职场文书
大众服装店创业计划书范文
2014/01/01 职场文书
初一生物教学反思
2014/01/18 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
2015年采购部工作总结
2015/04/23 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
董事长秘书工作总结
2015/08/14 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书
你真的会用Mysql的explain吗
2022/03/31 MySQL
Vue.Draggable实现交换位置
2022/04/07 Vue.js