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 相关文章推荐
Sample script that deletes a SQL Server database
Jun 16 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
Sep 29 Javascript
javascript时间函数大全
Jun 30 Javascript
jQuery基础语法实例入门
Dec 23 Javascript
新手快速学习JavaScript免费教程资源汇总
Jun 25 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
Oct 27 Javascript
JavaScript登录验证码的实现
Oct 27 Javascript
浅谈如何使用 webpack 优化资源
Oct 20 Javascript
webpack开发环境和生产环境的深入理解
Nov 08 Javascript
vue 实现Web端的定位功能 获取经纬度
Aug 08 Javascript
vue el-table实现自定义表头
Dec 11 Javascript
详解JavaScript中的执行上下文及调用堆栈
Apr 29 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
php实现通用的信用卡验证类
2015/03/24 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
2019/10/21 PHP
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
javascript 获取表单file全路径
2009/12/31 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
24款热门实用的jQuery插件推荐
2014/12/24 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
Angularjs中controller的三种写法分享
2016/09/21 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
JQuery ZTree使用方法详解
2017/01/07 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
2017/02/05 Javascript
Vue中保存数据到磁盘文件的方法
2018/09/06 Javascript
详解npm 配置项registry修改为淘宝镜像
2018/09/07 Javascript
傻瓜式vuex语法糖kiss-vuex整理
2018/12/21 Javascript
mpvue性能优化实战技巧(小结)
2019/04/17 Javascript
layui-table对返回的数据进行转变显示的实例
2019/09/04 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
基于python(urlparse)模板的使用方法总结
2017/10/13 Python
详解Python中的正则表达式
2018/07/08 Python
Python向excel中写入数据的方法
2019/05/05 Python
VPS CENTOS 上配置python,mysql,nginx,uwsgi,django的方法详解
2019/07/01 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
Python如何使用27行代码绘制星星图
2020/07/20 Python
python中random模块详解
2021/03/01 Python
你不知道的5个HTML5新功能
2016/06/28 HTML / CSS
小学生寒假家长评语
2014/04/16 职场文书
缓刑人员思想汇报500字
2014/09/12 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
2014年学校德育工作总结
2014/12/05 职场文书