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字符串拼接
Jun 25 Javascript
jQuery插件实现适用于移动端的地址选择器
Feb 18 Javascript
微信小程序 wxapp地图 map详解
Oct 31 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
Oct 18 Javascript
Javascript 编码约定(编码规范)
Mar 11 Javascript
vue超时计算的组件实例代码
Jul 09 Javascript
jQuery轻量级表单模型验证插件
Oct 15 jQuery
vue+element模态框中新增模态框和删除功能
Jun 11 Javascript
async/await让异步操作同步执行的方法详解
Nov 01 Javascript
微信小程序实现轨迹回放的示例代码
Dec 13 Javascript
js实现图片上传到服务器和回显
Jan 19 Javascript
vue项目查看vue版本及cli版本的实现方式
Oct 24 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
PHP类中Static方法效率测试代码
2010/10/17 PHP
php标签云的实现代码
2012/10/10 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
php获取开始与结束日期之间所有日期的方法
2016/11/29 PHP
php实现数据库的增删改查
2017/02/26 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
简单通用的JS滑动门代码
2008/12/19 Javascript
通用JS事件写法实现代码
2009/01/07 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
JS的replace方法详细介绍
2012/11/09 Javascript
javascript基本算法汇总
2016/03/09 Javascript
下一代Bootstrap的5个特点 超酷炫!
2016/06/17 Javascript
jQuery获取与设置iframe高度的方法
2016/08/01 Javascript
JS读写CSS样式的方法汇总
2016/08/16 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python爬取拉勾网职位数据的方法
2018/01/24 Python
python3爬取数据至mysql的方法
2018/06/26 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
django之静态文件 django 2.0 在网页中显示图片的例子
2019/07/28 Python
python实现批量文件重命名
2019/10/31 Python
基于jupyter代码无法在pycharm中运行的解决方法
2020/04/21 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
美国踏板车和轻便摩托车销售网站:Mega Motor Madness
2020/02/26 全球购物
中餐厅经理岗位职责
2014/04/11 职场文书
总经理助理岗位职责
2015/01/31 职场文书
针对吵架老公保证书
2015/05/08 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang
MongoDB orm框架的注意事项及简单使用
2021/06/20 MongoDB
分享7个 Python 实战项目练习
2022/03/03 Python