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 相关文章推荐
学习ExtJS accordion布局
Oct 08 Javascript
轻量级 JS ToolTip提示效果
Jul 20 Javascript
jQuery实现动画效果的实例代码
May 07 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
Jan 22 Javascript
jQuery实现的自定义弹出层效果实例详解
Sep 04 Javascript
ionic2 tabs使用 Modal底部tab弹出框
Dec 30 Javascript
JavaScript数据结构之二叉树的删除算法示例
Apr 13 Javascript
Javascript实现base64的加密解密方法示例
Jun 27 Javascript
Vue+Element使用富文本编辑器的示例代码
Aug 14 Javascript
关于JavaScript的单双引号嵌套问题
Aug 20 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
Feb 22 Javascript
js实现登录拖拽窗口
Feb 10 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 ajax 静态分页过程形式
2011/09/02 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
Thinkphp极验滑动验证码实现步骤解析
2020/11/24 PHP
escape、encodeURI、encodeURIComponent等方法的区别比较
2006/12/27 Javascript
javascript 数组排序函数
2009/08/20 Javascript
浏览器解析js生成的html出现样式问题的解决方法
2012/04/16 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
checkbox使用示例
2013/08/23 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
原生js实现自由拖拽弹窗代码demo
2016/06/29 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
小程序scroll-view组件实现滚动的示例代码
2018/09/20 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
JS实现点击掉落特效
2021/01/29 Javascript
Django自定义分页效果
2017/06/27 Python
python递归函数绘制分形树的方法
2018/06/22 Python
django利用request id便于定位及给日志加上request_id
2018/08/26 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
Python循环实现n的全排列功能
2019/09/16 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
Python random模块的使用示例
2020/10/10 Python
四种会话跟踪技术
2015/05/20 面试题
2014年学习厉行节约反对浪费思想汇报
2014/09/10 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
MySQL之PXC集群搭建的方法步骤
2021/05/25 MySQL
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android