纯JS实现可用于页码更换的飞页特效示例


Posted in Javascript onMay 21, 2018

本文实例讲述了纯JS实现可用于页码更换的飞页特效。分享给大家供大家参考,具体如下:

这个效果使用了自己封装的一个运动函数;这个效果的巧妙之处在于,在开始用数组存放了每个li的位置信息,然后在点击按钮(页码)的时候让li的宽高位置和透明度发生运动的改变一个一个的消失,然后在消失结束之后,再一个个倒着出现;可以和页码进行匹配,从而实现页码更换的效果

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>3water.com JS飞入效果</title>
  <link rel="stylesheet" href="stylesheets/base.css" rel="external nofollow" >
  <style>
    body{
      background:#000;
    }
    .header{
      width: 100%;
      height: 40px;
      background:#fff;
      font:bold 30px/40px '微软雅黑';
      text-align:center;
    }
    input{
      background:#fff;
      margin-top:5px;
      width: 50px;
      height: 20px;
      font:bold 12px/20px '微软雅黑';
    }
    ul{
      width: 360px;
      height: 360px;
      margin:50px auto;
    }
    ul li{
      width: 100px;
      height: 100px;
      background:skyblue;
      float:left;
      margin:5px;
    }
  </style>
  <script src="move.js"></script>
  <script>
    window.onload=function(){
      var oBtn=document.getElementById('btn1');
      var oUl=document.getElementsByTagName('ul')[0];
      var aLi=oUl.children;
      //用数组来存放没个li的位置
      var arr=[];
      //存位置
      for(var i=0;i<aLi.length;i++) {
        arr[i] = {
        left:aLi[i].offsetLeft,
        top:aLi[i].offsetTop
        };
      }
      //给目前的li定位
      for(var i=0;i<arr.length;i++){
        aLi[i].style.position='absolute';
        aLi[i].style.left=arr[i].left+'px';
        aLi[i].style.top=arr[i].top+'px';
        aLi[i].style.margin=0;
      }
      //当点击的时候开定时器,让li一个一个的走
      var iNow=0;
      var timer=null;
      var bReady=false;
      oBtn.onclick=function(){
        if(bReady){return;}
        bReady=true;
        timer=setInterval(function(){
          move(aLi[iNow],{left:0,top:0,height:0,width:0,opacity:0},{'duration':200,'complete':function(){
            if(iNow==arr.length-1){
              clearInterval(timer);
              back();
              bReady=false;
            }
            iNow++;
          }});
        },220);
      };
      function back(){
        timer=setInterval(function(){
          iNow--;
          move(aLi[iNow],{left:arr[iNow].left,top:arr[iNow].top,height:100,width:100,opacity:1},{'duration':200,'complete':function(){
            if(iNow==0){
              clearInterval(timer);
            }
          }});
        },220);
      }
    };
  </script>
</head>
<body>
  <div class="header">飞页效果</div>
  <input type="button" value="走你" id="btn1">
  <ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
  </ul>
</body>
</html>

运动函数move.js:

/**
 * Created by Jason on 2016/11/7.
 */
function getStyle(obj,sName){
  return (obj.currentStyle || getComputedStyle(obj,false))[sName];
}
function move(obj,json,options){
  var options=options || {};
  var duration=options.duration || 1000;
  var easing=options.easing || 'linear';
  var start={};
  var dis={};
  for(name in json){
    start[name]=parseFloat(getStyle(obj,name));
    dis[name]=json[name]-start[name];
  }
  //start {width:50,} dis {width:150}
  //console.log(start,dis);
  var count=Math.floor(duration/30);
  var n=0;
  clearInterval(obj.timer);
  obj.timer=setInterval(function(){
    n++;
    for(name in json){
      switch (easing){
        case 'linear':
          var a=n/count;
          var cur=start[name]+dis[name]*a;
          break;
        case 'ease-in':
          var a=n/count;
          var cur=start[name]+dis[name]*a*a*a;
          break;
        case 'ease-out':
          var a=1-n/count;
          var cur=start[name]+dis[name]*(1-a*a*a);
          break;
      }
      if(name=='opacity'){
        obj.style.opacity=cur;
      }else{
        obj.style[name]=cur+'px';
      }
    }
    if(n==count){
      clearInterval(obj.timer);
      options.complete && options.complete();
    }
  },30);
}

运行效果如下:

纯JS实现可用于页码更换的飞页特效示例

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
jQuery-serialize()输出序列化form表单值的方法
Dec 26 Javascript
jqplot通过ajax动态画折线图的方法及思路
Dec 08 Javascript
jquery实现checkbox 全选/全不选的通用写法
Feb 22 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
Oct 02 Javascript
AngularJS 入门教程之HTML DOM实例详解
Jul 28 Javascript
jQuery滚动插件scrollable.js用法分析
May 25 jQuery
js实现城市级联菜单的2种方法
Jun 23 Javascript
微信小程序实现漂亮的弹窗效果
May 26 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
Sep 27 Javascript
微信开发之微信jssdk录音功能开发示例
Oct 22 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
Dec 06 Javascript
Vue 电商后台管理项目阶段性总结(推荐)
Aug 22 Javascript
JS实现的文件拖拽上传功能示例
May 21 #Javascript
以v-model与promise两种方式实现vue弹窗组件
May 21 #Javascript
Vue二次封装axios为插件使用详解
May 21 #Javascript
详解vue的diff算法原理
May 20 #Javascript
详解使用vue-admin-template的优化历程
May 20 #Javascript
vuex进阶知识点巩固
May 20 #Javascript
简单的三步vuex入门
May 20 #Javascript
You might like
Redis构建分布式锁
2017/03/28 PHP
CSS中简写属性要注意TRouBLe的顺序问题(避免踩坑)
2021/03/09 HTML / CSS
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
js实现弹窗居中的简单实例
2016/10/09 Javascript
jQuery.Validate表单验证插件的使用示例详解
2017/01/04 Javascript
使用bat打开多个cmd窗口执行gulp、node
2017/02/17 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
2017/07/31 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
一些手写JavaScript常用的函数汇总
2019/04/16 Javascript
微信小程序实现卡片层叠滑动效果
2019/06/21 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
2020/11/06 Javascript
Python使用random.shuffle()打乱列表顺序的方法
2018/11/08 Python
Flask核心机制之上下文源码剖析
2018/12/25 Python
Python Django 封装分页成通用的模块详解
2019/08/21 Python
python多线程分块读取文件
2019/08/29 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
工作个人的自我评价
2014/01/14 职场文书
入党积极分子介绍信
2014/01/17 职场文书
2014年大学生自我评价
2014/01/19 职场文书
化工工艺设计求职信
2014/06/25 职场文书
党员个人自我剖析材料
2014/10/08 职场文书
优秀教师事迹材料
2014/12/15 职场文书
学术会议通知范文
2015/04/15 职场文书
辩护词格式
2015/05/22 职场文书
小学庆六一主持词
2015/06/30 职场文书
听证会主持词
2015/07/03 职场文书
2016年大学迎新晚会工作总结
2015/10/15 职场文书
2019年大学生学年自我鉴定!
2019/03/25 职场文书
员工试用期工作总结
2019/06/20 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
Go Grpc Gateway兼容HTTP协议文档自动生成网关
2022/06/16 Golang