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 相关文章推荐
jQuery固定浮动侧边栏实现思路及代码
Sep 28 Javascript
JavaScript将字符串转换成字符编码列表的方法
Mar 19 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
Sep 21 Javascript
详解JavaScript中的属性和特性
Dec 08 Javascript
jQuery Ajax请求后台数据并在前台接收
Dec 10 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
Jul 05 Javascript
javascript中的replace函数(带注释demo)
Jan 07 Javascript
在Vue组件上动态添加和删除属性方法
Feb 23 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
Jan 24 Javascript
vue实现节点增删改功能
Sep 26 Javascript
Vue防止白屏添加首屏动画的实例
Oct 31 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
Oct 23 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
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
Windows下安装Memcached的步骤说明
2010/04/25 PHP
PHP编程实现微信企业向用户付款的方法示例
2017/07/26 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
js取值中form.all和不加all的区别介绍
2014/01/20 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
javascript每日必学之条件分支
2016/02/17 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
vue.js通过自定义指令实现数据拉取更新的实现方法
2016/10/18 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
在vue中使用SockJS实现webSocket通信的过程
2018/08/29 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
[07:27]DOTA2卡尔工作室 英雄介绍水晶室女篇
2013/06/21 DOTA
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
python在指定目录下查找gif文件的方法
2015/05/04 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
Python random模块制作简易的四位数验证码
2020/02/01 Python
Python是什么 Python的用处
2020/05/26 Python
在Python中字典按值排序的实现方法
2020/11/12 Python
美国亚马逊旗下男装网站:East Dane(支持中文)
2019/09/25 全球购物
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
2014年开学第一课活动方案
2014/03/06 职场文书
村党支部群众路线教育实践活动对照检查材料
2014/09/26 职场文书
村干部任职承诺书
2015/01/21 职场文书
领导离职感言
2015/08/03 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
html+css实现滚动到元素位置显示加载动画效果
2021/08/02 HTML / CSS
Win11更新失败并提示0xc1900101
2022/04/19 数码科技