纯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 相关文章推荐
推荐11款jQuery开发的复选框和单选框美化插件
Aug 02 Javascript
Javascript基础 函数“重载” 详细介绍
Oct 25 Javascript
iframe调用父页面函数示例详解
Jul 17 Javascript
javascript定义类和类的实现实例详解
Dec 01 Javascript
jquery mobile 移动web(5)
Dec 20 Javascript
jquery仿QQ登录账号选择下拉框效果
Mar 22 Javascript
什么是JavaScript中的结果值?
Oct 08 Javascript
jquery 判断div show的状态实例
Dec 03 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
May 10 Javascript
微信小程序异步处理详解
Nov 10 Javascript
vue+element模态框中新增模态框和删除功能
Jun 11 Javascript
React Native 混合开发多入口加载方式详解
Sep 23 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内核探索之变量
2015/12/22 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
jQuery中clearQueue()方法用法实例
2014/12/29 Javascript
基于AngularJS实现的工资计算器实例
2017/06/16 Javascript
关于vue面试题汇总
2018/03/20 Javascript
npm 更改默认全局路径以及国内镜像的方法
2018/05/16 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
代码分析vue中如何配置less
2018/09/28 Javascript
vue实现分页组件
2020/06/16 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
详解Vue项目中实现锚点定位
2019/04/24 Javascript
JavaScript的console命令使用实例
2019/12/03 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
Vertx基于EventBus发送接受自定义对象
2020/11/16 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
celery4+django2定时任务的实现代码
2018/12/23 Python
Win10下Python3.7.3安装教程图解
2019/07/08 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
Python netmiko模块的使用
2020/02/14 Python
html5将图片转换成base64的实例代码
2016/09/21 HTML / CSS
培训主管的职业生涯规划
2014/03/06 职场文书
项目建议书格式
2014/03/12 职场文书
建房协议书
2014/04/11 职场文书
建设幸福中国演讲稿
2014/09/11 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
推销搭讪开场白
2015/05/28 职场文书
工作表现证明
2015/06/15 职场文书
CSS基础详解
2021/10/16 HTML / CSS
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技