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判断移动端访问设备并解析对应CSS的方法
Feb 05 Javascript
jquery SweetAlert插件实现响应式提示框
Aug 18 Javascript
bootstrap与Jquery UI 按钮样式冲突的解决办法
Sep 23 Javascript
jQuery图片加载显示loading效果
Nov 04 Javascript
vue的事件绑定与方法详解
Aug 16 Javascript
集合Bootstrap自定义confirm提示效果
Sep 19 Javascript
webpack项目调试以及独立打包配置文件的方法
Feb 28 Javascript
vue中axios解决跨域问题和拦截器的使用方法
Mar 07 Javascript
JS实现简单的星期格式转换功能示例
Jul 23 Javascript
解决vue点击控制单个样式的问题
Sep 05 Javascript
Vue 配合eiement动态路由,权限验证的方法
Sep 26 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
Mar 19 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蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
基于jquery的loading效果实现代码
2010/11/05 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
js有关元素内容操作小结
2011/12/20 Javascript
nodejs读取memcache示例分享
2014/01/02 NodeJs
jQuery切换网页皮肤并保存到Cookie示例代码
2014/06/16 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
Angular2 (RC5) 路由与导航详解
2016/09/21 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
JavaScript实现移动端拖动元素
2020/11/24 Javascript
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
Python中datetime常用时间处理方法
2015/06/15 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
python Django的web开发实例(入门)
2019/07/31 Python
使用pandas读取文件的实现
2019/07/31 Python
Django应用程序入口WSGIHandler源码解析
2019/08/05 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
Python timeit模块的使用实践
2020/01/13 Python
通过python-pptx模块操作ppt文件的方法
2020/12/26 Python
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
微软马来西亚官方网站:Microsoft马来西亚
2019/11/22 全球购物
毕业生求职自荐信怎么写
2014/01/08 职场文书
求职毕业生自荐书
2014/02/08 职场文书
国企干部对照检查材料
2014/08/22 职场文书
个人存款证明书
2014/10/18 职场文书
司机岗位职责范本
2015/04/10 职场文书
大学生如何逃脱“毕业季创业队即散伙”魔咒?
2019/08/19 职场文书