js回调函数仿360开机


Posted in Javascript onDecember 26, 2019

本文实例为大家分享了js回调函数仿360开机的具体代码,供大家参考,具体内容如下

<!DOCTYPE html>
<html>
<head lang="en">
  <meta charset="UTF-8">
  <title></title>
  <style>
    #demo{
      width: 322px;  /*不设高,因为下面的盒子消失之后,上面的盒子立刻掉下来*/
      position: fixed;
      bottom:0;
      right:0;
    }
    span{
      position: absolute;
      top:0;
      right:0;
      width:30px;
      height: 20px;
      cursor: pointer;
    }
  </style>
</head>
<body>
<div id="demo">
  <span id="close"></span> <!--盒子右上角的x号区域-->
  <div id="shang">
    <img src="t.jpg" alt=""/>
  </div>
  <div id="xia">
    <img src="b.jpg" alt=""/>
  </div>
</div>
</body>
</html>
<script>
   function $id(id){return document.getElementById(id);}
   var demo=$id("demo");
   var shang=$id("shang");
   var xia=$id("xia");
   var close=$id("close"); //注意:不能直接用span.onclick,因为span是div的子元素,点击span的时候,发生了事件冒泡,响应在了父元素div上,所以对onclick事件的响应元素是父元素div
   close.onclick=function () {
       run(xia,{height:0},function () { //仿360开机:点击关闭区域时,首先下面的盒子高度变为0,之后整个大盒子宽度变成0,依次消失
         run(demo,{width:0}) //这里使用了回调函数
       })
   }
 
  //封装运动框架基本函数(多个属性)
  function run(obj,json,fn) {
    clearInterval(obj.timer);
    obj.timer=setInterval(function () {
      var flag=true; //用来判断定时器是否停止,一定写在遍历的外面,否则一遍历就true
      for( attr in json)
      {
        var cstyle=parseInt(getStyle(obj,attr)); //获得当前属性
        var step=(json[attr]-cstyle)/10; //计算步长
        step=step>0 ? Math.ceil(step) : Math.floor(step);
        obj.style[attr]=cstyle+step+"px";
 
        if(cstyle!=json[attr]) //在遍历中,只要有一个属性值没到达目标位置,定时器就不能停
        {
          flag=false;
        }
      }
 
      if(flag) //遍历完了之后,flag是true,所有的值都到达目标位置了,停止定时器
      {
        clearInterval(obj.timer);
        if(fn) //回调函数,定时器关闭之后,如果有fn,执行fn()
        {
          fn();
        }
      }
    },30)
  }
 
  //返回当前样式的函数
  function getStyle(obj,attr) //返回谁的,哪个属性
  {
    if(obj.currrentStyle)
    {
      return obj.currentStyle[attr];
    }
    else{
      return window.getComputedStyle(obj,null)[attr]; //w3c浏览器
    }
  }
 
</script>

js回调函数仿360开机

关键代码:

1、demo(最外面整个大盒子)的定位

固定定位,放在页面的右下方 

span(关闭按钮)绝对定位在demo的右上方:

#demo{
  width:322px;
  position : fixed;
  bottom:0;
  right:0;
} 
span{
width:30px;

height: 20px;

position:absolute;

top:0;

right:0;

cursor:pointer;
}

2、防止冒泡,因为span(关闭按钮)的父元素是demo, 所以不能直接写 span.onclick , 这样会发生冒泡,相当于点击了父元素demo, 事件会响应在父元素上,所以应该用span的 id 绑定事件

3、回调函数,点击关闭按钮时,首先下面的盒子 高度变成 0 ,然后整个盒子的宽度 变成 0,依次消失 (所以一开始demo 的高度不应该设置,因为下面的盒子消失之后,上面的盒子会掉下来)  回调函数写的位置:定时器结束的位置

close.onclick=function(){
  run(xia, {height:0}, function(){
    run(shang,{demo:0}
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript网页关闭时提醒效果脚本
Oct 22 Javascript
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
Jul 11 Javascript
jquery使用animate方法实现控制元素移动
Mar 27 Javascript
javascript实现Table排序的方法
May 15 Javascript
浅析JS操作DOM的一些常用方法
May 13 Javascript
jQuery Masonry瀑布流布局神器使用详解
May 25 jQuery
创建简单的node服务器实例(分享)
Jun 23 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
Sep 05 Javascript
vue 路由页面之间实现用手指进行滑动的方法
Feb 23 Javascript
Layui实现主窗口和Iframe层参数传递
Nov 14 Javascript
js实现打字小游戏
Dec 17 Javascript
Vue 实现对quill-editor组件中的工具栏添加title
Aug 03 Javascript
js仿360开机效果
Dec 26 #Javascript
element-ui中按需引入的实现
Dec 25 #Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
Dec 25 #Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
Dec 25 #jQuery
解决Vue 刷新页面导航显示高亮位置不对问题
Dec 25 #Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
Dec 25 #Javascript
如何基于JS截获动态代码
Dec 25 #Javascript
You might like
全国FM电台频率大全 - 22 重庆市
2020/03/11 无线电
php实现mysql数据库操作类分享
2014/02/14 PHP
Laravel框架实现的rbac权限管理操作示例
2019/01/16 PHP
Javascript 判断是否存在函数的方法
2013/01/03 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
bootstrap-treeview自定义双击事件实现方法
2016/01/09 Javascript
Angularjs过滤器使用详解
2016/05/25 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
图片上传之FileAPI与NodeJs
2017/01/24 NodeJs
ES6下React组件的写法示例代码
2017/05/04 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
node中的密码安全(加密)
2018/09/17 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
js实现通过开始结束控制的计时器
2019/02/25 Javascript
详解NodeJS Https HSM双向认证实现
2019/03/12 NodeJs
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
通过mod_python配置运行在Apache上的Django框架
2015/07/22 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
2018/01/10 Python
Python实现学生成绩管理系统
2020/04/05 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
Python闭包函数定义与用法分析
2018/07/20 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
详解pandas赋值失败问题解决
2020/11/29 Python
matplotlib绘制多子图共享鼠标光标的方法示例
2021/01/08 Python
工程部经理岗位职责
2013/12/08 职场文书
大学生涯自我鉴定
2014/01/16 职场文书
2014年百日安全生产活动总结
2014/05/04 职场文书
教师病假条范文
2015/08/17 职场文书