纯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 相关文章推荐
IE 下Enter提交表单存在重复提交问题的解决方法
May 04 Javascript
jquery中append()与appendto()用法分析
Nov 14 Javascript
省市区三级联动下拉框菜单javascript版
Aug 11 Javascript
jQuery遍历json的方法分析
Apr 16 Javascript
JavaScript程序中实现继承特性的方式总结
Jun 24 Javascript
使用JavaScript为一张图片设置备选路径的方法
Jan 04 Javascript
php 解压zip压缩包内容到指定目录的实例
Jan 23 Javascript
微信小程序画布圆形进度条显示效果
Nov 17 Javascript
在vue项目中使用md5加密的方法
Sep 14 Javascript
vue中父子组件的参数传递和应用示例
Jan 04 Vue.js
vue route新窗口跳转页面并且携带与接收参数
Apr 10 Vue.js
vue代码分块和懒加载非必要资源文件
Apr 11 Vue.js
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
国内咖啡文化
2021/03/03 咖啡文化
NT IIS下用ODBC连接数据库
2006/10/09 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
PHP版 汉字转码的实现详解
2013/06/09 PHP
解析strtr函数的效率问题
2013/06/26 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
PHP实现关键字搜索后描红功能示例
2019/07/03 PHP
图片自动更新(说明)
2006/10/02 Javascript
jquery 防止表单重复提交代码
2010/01/21 Javascript
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
我的Node.js学习之路(二)NPM模块管理
2014/07/06 Javascript
解决jquery插件:TypeError:$.browser is undefined报错的方法
2015/11/21 Javascript
简单实现JS对dom操作封装
2015/12/02 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
基于Node.js的WebSocket通信实现
2017/03/11 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
JavaScript继承的特性与实践应用深入详解
2018/12/30 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
[14:25]教你分分钟做大人:主宰(HEROS)
2014/12/08 DOTA
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
Python必须了解的35个关键词
2020/07/16 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
如何安装ruby on rails
2014/02/09 面试题
内容编辑个人求职信
2013/12/10 职场文书
2014年党员公开承诺践诺书
2014/03/25 职场文书
节水口号标语
2014/06/19 职场文书
出生公证书
2015/01/23 职场文书
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python