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的朋友一点学习经验小结
Nov 23 Javascript
jQuery EasyUI API 中文文档 - DataGrid数据表格
Nov 17 Javascript
js取模(求余数)隔行变色
May 15 Javascript
jquery、js调用iframe父窗口与子窗口元素的方法整理
Jul 31 Javascript
在JS数组特定索引处指定位置插入元素的技巧
Aug 24 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
Jul 21 Javascript
jsp 网站引入外部css或者js失效问题解决
Oct 31 Javascript
jQuery Checkbox 全选 反选的简单实例
Nov 29 Javascript
js数组方法reduce经典用法代码分享
Jan 07 Javascript
区别JavaScript函数声明与变量声明
Sep 12 Javascript
用vue 实现手机触屏滑动功能
May 28 Javascript
15个简单的JS编码标准让你的代码更整洁(小结)
Jul 16 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
第十二节--类的自动加载
2006/11/16 PHP
PHP简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
nodejs下打包模块archiver详解
2014/12/03 NodeJs
JavaScript获取当前url根目录(路径)
2016/06/17 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
Bootstrap基本组件学习笔记之进度条(15)
2016/12/08 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
angularjs+bootstrap菜单的使用示例代码
2017/03/07 Javascript
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
vue解决一个方法同时发送多个请求的问题
2018/09/25 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
在vue中created、mounted等方法使用小结
2020/07/21 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
python3利用venv配置虚拟环境及过程中的小问题小结
2018/08/01 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
python遍历路径破解表单的示例
2020/11/21 Python
Python爬虫之Selenium实现键盘事件
2020/12/04 Python
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
酒店总经理职务说明书
2014/02/26 职场文书
结婚喜宴主持词
2014/03/14 职场文书
精彩广告词大全
2014/03/19 职场文书
产假请假条
2014/04/10 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
写给女朋友的保证书
2015/05/09 职场文书
学校就业保障协议书
2019/06/24 职场文书
中学生打架《检讨书》范文
2019/08/12 职场文书
Python OpenCV超详细讲解读取图像视频和网络摄像头
2022/04/02 Python
tomcat下部署jenkins的方法
2022/05/06 Servers