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 相关文章推荐
js post方式传递提交的实现代码
May 31 Javascript
用JS判断IE版本的代码 超管用!
Aug 09 Javascript
js保留两位小数使用toFixed实现
Jul 29 Javascript
jQuery$命名冲突怎么办如何解决
Jan 16 Javascript
jQuery操作表单常用控件方法小结
Mar 23 Javascript
基于JavaScript实现高德地图和百度地图提取行政区边界经纬度坐标
Jan 22 Javascript
理解JavaScript原型链
Oct 25 Javascript
sea.js常用的api简易文档
Nov 15 Javascript
js中string和number类型互转换技巧(分享)
Nov 28 Javascript
js判断手机系统是android还是ios
Mar 07 Javascript
详解Vue用自定义指令完成一个下拉菜单(select组件)
Oct 31 Javascript
javascript实现简单页面倒计时
Mar 02 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
咖啡的植物学知识
2021/03/03 咖啡文化
php运行时动态创建函数的方法
2015/03/16 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
日历查询的算法 如何计算某一天是星期几
2012/12/12 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
JS判断字符串包含的方法
2015/05/05 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
Bootstrap模态框(Modal)实现过渡效果
2017/03/17 Javascript
微信小程序实时聊天WebSocket
2018/07/05 Javascript
让webpack+vue-cil项目不再自动打开浏览器的方法
2018/09/27 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
webpack5 联邦模块介绍详解
2020/07/08 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
python计算圆周率pi的方法
2015/07/11 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
Python将list中的string批量转化成int/float的方法
2018/06/26 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
学python需要去培训机构吗
2020/07/01 Python
详解HTML5.2版本带来的修改
2020/05/06 HTML / CSS
电子银行营销方案
2014/02/22 职场文书
入学申请自荐信范文
2014/02/26 职场文书
小露珠教学反思
2014/04/30 职场文书
构建和谐校园倡议书
2015/01/19 职场文书
Python进程间的通信之语法学习
2022/04/11 Python
win11怎么消除图标小盾牌?win11消除图标小盾牌解决方法
2022/08/05 数码科技