纯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制作浮动广告代码
Dec 30 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
Apr 08 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
Jun 09 Javascript
JS实现物体带缓冲的间歇运动效果示例
Dec 22 Javascript
JS跨域请求外部服务器的资源
Feb 06 Javascript
vue watch普通监听和深度监听实例详解(数组和对象)
Aug 16 Javascript
JS加密插件CryptoJS实现的DES加密示例
Aug 16 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
Jan 27 Javascript
VSCode使用之Vue工程配置eslint
Apr 30 Javascript
JS使用正则表达式实现常用的表单验证功能分析
Apr 30 Javascript
VUE 项目在IE11白屏报错 SCRIPT1002: 语法错误的解决
Sep 27 Javascript
JavaScript与JQuery框架基础入门教程
Jul 15 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
ADODB的数据库封包程序库
2006/12/31 PHP
php中namespace及use用法分析
2016/12/06 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
PHP基于PDO扩展操作mysql数据库示例
2018/12/24 PHP
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
Three.js学习之Lamber材质和Phong材质
2016/08/04 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
2017/08/25 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
[02:09]EHOME夺得首届辉夜杯冠军—现场颁奖仪式
2015/12/28 DOTA
python list语法学习(带例子)
2013/11/01 Python
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
Python装饰器decorator用法实例
2014/11/10 Python
Python开发常用的一些开源Package分享
2015/02/14 Python
Python中datetime常用时间处理方法
2015/06/15 Python
Python 搭建Web站点之Web服务器网关接口
2016/11/06 Python
Python中return self的用法详解
2018/07/27 Python
python使用udp实现聊天器功能
2018/12/10 Python
【python】matplotlib动态显示详解
2019/04/11 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
python中os包的用法
2020/06/01 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
DVF官方网站:美国时装界尊尚品牌
2017/08/29 全球购物
老公爱的承诺书
2014/03/31 职场文书
《灰椋鸟》教学反思
2014/04/27 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
明星员工获奖感言
2014/08/14 职场文书
房屋所有权证明
2014/10/20 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
html+css实现文字折叠特效实例
2021/06/02 HTML / CSS