纯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 相关文章推荐
25个非常棒的jQuery滑块插件和教程小结
Sep 02 Javascript
JavaScript 中的日期和时间及表示标准介绍
Aug 21 Javascript
js实现touch移动触屏滑动事件
Apr 17 Javascript
javascript实现列表滚动的方法
Jul 30 Javascript
jQuery实现的网页左侧在线客服效果代码
Oct 23 Javascript
jquery获取文档高度和窗口高度汇总
Jan 25 Javascript
分享自己用JS做的扫雷小游戏
Feb 17 Javascript
浅谈addEventListener和attachEvent的区别
Jul 14 Javascript
Bootstrap表格使用方法详解
Feb 17 Javascript
angularjs 获取默认选中的单选按钮的value方法
Feb 28 Javascript
Bootstrap 中data-[*] 属性的整理
Mar 13 Javascript
原生JS实现列表内容自动向上滚动效果
May 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
用PHP生成html分页列表的代码
2007/03/18 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
php实现的mysqldb读写分离操作类示例
2017/02/07 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
JavaScript中的prototype使用说明
2010/04/13 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
jquery实现自定义图片裁剪功能【推荐】
2017/03/08 Javascript
实时监控input框,实现输入框与下拉框联动的实例
2018/01/23 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
python里将list中元素依次向前移动一位
2014/09/12 Python
Python编写屏幕截图程序方法
2015/02/18 Python
Python pickle模块用法实例
2015/04/14 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
python对于requests的封装方法详解
2019/01/03 Python
Python两个字典键同值相加的几种方法
2019/03/05 Python
详解python解压压缩包的五种方法
2019/07/05 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
上课睡觉检讨书
2014/01/28 职场文书
省优秀教师事迹材料
2014/01/30 职场文书
试用期员工工作自我评价
2014/09/10 职场文书
2015年组织部工作总结
2015/04/03 职场文书
导游词之神仙居景区
2019/11/15 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
MySQL分区以及建索引的方法总结
2022/04/13 MySQL
MySQL数据库事务的四大特性
2022/04/20 MySQL
python可视化分析绘制带趋势线的散点图和边缘直方图
2022/06/25 Python