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右键菜单效果代码
Jul 21 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
Dec 11 Javascript
Javascript面向对象编程(二) 构造函数的继承
Aug 28 Javascript
JS批量修改PS中图层名称的方法
Jan 26 Javascript
javascript实现dom元素可拖动
Mar 21 Javascript
用JS实现轮播图效果(二)
Jun 26 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
Nov 26 Javascript
Bootstrap3 datetimepicker控件使用实例
Dec 13 Javascript
移动前端图片压缩上传的实例
Dec 06 Javascript
JS实现为动态创建的元素添加事件操作示例
Mar 17 Javascript
Vue触发隐藏input file的方法实例详解
Aug 14 Javascript
vue 页面跳转的实现方式
Jan 12 Vue.js
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
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
什么是MVC,好东西啊
2007/05/03 PHP
php cli 方式 在crotab中运行解决
2010/02/08 PHP
PHP使用数组依次替换字符串中匹配项
2016/01/08 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
php使用curl代理实现抓取数据的方法
2017/02/03 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
一个JQuery操作Table的代码分享
2012/03/30 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
javascript中日期函数new Date()的浏览器兼容性问题
2015/09/05 Javascript
JS实现自动变换的菜单效果代码
2015/09/09 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
a标签置灰不可点击的实现方法
2017/02/06 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
python读文件逐行处理的示例代码分享
2013/12/27 Python
python 数据清洗之数据合并、转换、过滤、排序
2017/02/12 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
Python3实现的简单工资管理系统示例
2019/03/12 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
Python 支持向量机分类器的实现
2020/01/15 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
python实现凯撒密码、凯撒加解密算法
2020/06/11 Python
Python实现扫码工具的示例代码
2020/10/09 Python
python脚本定时发送邮件
2020/12/22 Python
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
质检员岗位职责
2013/12/17 职场文书
小学校长个人总结
2015/03/03 职场文书
Python实现日志实时监测的示例详解
2022/04/06 Python