纯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基本过滤选择器使用介绍
Apr 18 Javascript
做好七件事帮你提升jQuery的性能
Feb 06 Javascript
深入探寻seajs的模块化与加载方式
Apr 14 Javascript
手机端页面rem宽度自适应脚本
May 20 Javascript
js实现对ajax请求面向对象的封装
Jan 08 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
Aug 10 Javascript
JavaScript动态数量的文件上传控件
Nov 18 Javascript
JS正则匹配URL网址的方法(可匹配www,http开头的一切网址)
Jan 06 Javascript
学习JS中的DOM节点以及操作
Apr 30 Javascript
简单了解JavaScript arguement原理及作用
May 28 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
Oct 17 Javascript
jQuery实现广告显示和隐藏动画
Jul 04 jQuery
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
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
php+ajax制作无刷新留言板
2015/10/27 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
PHP生成随机字符串实例代码(字母+数字)
2019/09/11 PHP
JavaScript isPrototypeOf和hasOwnProperty使用区别
2010/03/04 Javascript
js FLASH幻灯片字符串中有连接符&的处理方法
2012/03/01 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
详解webpack打包第三方类库的正确姿势
2018/10/20 Javascript
编写自定义的Django模板加载器的简单示例
2015/07/21 Python
分享Python文本生成二维码实例
2016/01/06 Python
Python 绘图和可视化详细介绍
2017/02/11 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
Python编程之string相关操作实例详解
2017/07/22 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
python 同时读取多个文件的例子
2019/07/16 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
python退出循环的方法
2020/06/18 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
Java程序员面试题
2016/09/27 面试题
中国央视网签名寄语
2014/01/18 职场文书
环保口号大全
2014/06/12 职场文书
李强为自己工作观后感
2015/06/11 职场文书
文明和谐家庭事迹材料(2016精选版)
2016/02/29 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
MySQL为id选择合适的数据类型
2021/06/07 MySQL