纯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 相关文章推荐
Javascript实现动态菜单添加的实例代码
Jul 05 Javascript
js实现的常用的左侧导航效果
Oct 17 Javascript
jQuery实现简单的列表式导航菜单效果代码
Aug 31 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
Sep 02 Javascript
超赞的jQuery图片滑块动画特效代码汇总
Jan 25 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
May 09 Javascript
利用js编写响应式侧边栏
Sep 17 Javascript
Node.js检测端口(port)是否被占用的简单示例
Sep 29 Javascript
通过js给网页加上水印背景实例
Jun 17 Javascript
微信小程序下拉框搜索功能的实现方法
Jul 31 Javascript
JS实现可用滑块滑动的缓动图代码
Sep 01 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
Mar 08 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
PHP中date()日期函数有关参数整理
2011/07/19 PHP
PHP版网站缓存加快打开速度的方法分享
2012/06/03 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
JS 获取select(多选下拉)中所选值的示例代码
2013/08/02 Javascript
jquery动态加载js三种方法实例
2013/08/03 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
轻松创建nodejs服务器(4):路由
2014/12/18 NodeJs
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
vue路由传参的基本实现方式小结【三种方式】
2020/02/05 Javascript
[02:51]DOTA2 2015国际邀请赛中国区预选赛第一日战报
2015/05/27 DOTA
[55:39]DOTA2-DPC中国联赛 正赛 VG vs LBZS BO3 第二场 1月19日
2021/03/11 DOTA
python3实现UDP协议的服务器和客户端
2017/06/14 Python
python的dataframe和matrix的互换方法
2018/04/11 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
2020/05/13 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
罗马尼亚购物网站:Vivantis.ro
2019/07/20 全球购物
Sony C++笔试题
2013/03/10 面试题
销售人员自我评价
2014/02/01 职场文书
你的创业计划书怎样才能打动风投
2014/02/06 职场文书
工程质量承诺书范文
2014/03/27 职场文书
征用土地赔偿协议书
2014/09/26 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
交通安全学习心得体会
2016/01/18 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书