原生JS实现风箱式demo,并封装了一个运动框架(实例代码)


Posted in Javascript onJuly 22, 2016

声明,该DEMO依托于某个培训机构中,非常感谢这个培训结构。话不多说,现在开始改demo的制作。

首先,在前端的学习过程中,轮播图是我们一定要学习的,所以为了更加高效的实现各种轮播图,封装了一个运动的框架。

function getStyle(obj,attr) {
  if(obj.currentStyle){
    return obj.currentStyle[attr];//为了获取IE下的属性值
  }else{
    return window.getComputedStyle(obj,null)[attr];//为了获取W3C浏览器下的属性值
  }
}

function animate(obj,json){
  clearInterval(obj.timer);
  obj.timer = setInterval(function () {
    var flag = true;
    var current = 0;
    for(var attr in json){
      if(attr == 'opacity'){
        current = parseInt(getStyle(obj,attr)*100);
      }else{
        current = parseInt(getStyle(obj,attr));
      };

      var step = (json[attr] - current) / 10;
      step = step > 0 ? Math.ceil(step) : Math.floor(step);
      //先判断属性是否为透明度
      if(attr == 'opacity'){
        //首先判断浏览器是否支持opacity
        if('opacity' in obj.style){
          obj.style.opacity = (current + step) / 100;
        }else{
          obj.style.filter = 'alpha(opacity = ' + (current + step) + ')';
        }
      //再判断属性是否为z-index
      }else if(attr == 'zIndex'){
        obj.style.zIndex = json[attr];
      //最后再判断
      }else{
        obj.style[attr] = current + step + 'px';
      }

      if(current != json[attr]){
        flag = false;
      }
    }

    if(flag){
      clearInterval(obj.timer);
    }
  },5);
}

在该框架中兼容了不同的浏览器,并且允许传入opacity和z-index这样的属性,当然,像width,height,left,right这样常见的属性是必不可少的。利用该框架,可以实现非常棒的效果。所以现在开始正式做该DEMO。

首先是index.html的制作。

<div id="box">
  <ul>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
    <li></li>
  </ul>
</div>

index.html的制作非常的简单,我们会将图片作为li的背景图片在javascript中进行插入。之后,我们进行CSS样式的调节。

*{
    margin:0px;
    padding:0px;
  }
  #box{
    width:1300px;
    height:400px;
    margin:100px auto;
    overflow: hidden;
  }
  #box ul{
    height:400px;
    width:1300px;
  }
  #box ul li{
    width:240px;
    height:400px;
    float:left;
    overflow: hidden;
  }

javascript的代码如下:

window.onload = function () {
    var box = document.getElementById('box');
    var aLi = box.children[0].children;
    for(var i=0;i<aLi.length;i++){
      aLi[i].style.backgroundImage = 'url(' + 'images/' + (i + 1) + '.jpg';
      aLi[i].onmouseover = function(){
        for(var i=0;i<aLi.length;i++){
          animate(aLi[i],{width:100});
        }
        animate(this,{width:800});
      };
      aLi[i].onmouseout = function(){
        for(var i=0;i<aLi.length;i++){
          animate(aLi[i],{width:240});
        }
      }
    }
  }

这样使用原生JS实现的风箱效果demo就实现了,当然,还可以利用封装好的animate框架实现类似网易的轮播图效果。

以上这篇原生JS实现风箱式demo,并封装了一个运动框架(实例代码)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
Aug 09 Javascript
window.open的页面如何刷新(父页面)上层页面
Dec 28 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
Jun 15 Javascript
使用focus方法让光标默认停留在INPUT框
Jul 29 Javascript
Javascript实现飞动广告效果的方法
May 25 Javascript
基于jQuery实现的扇形定时器附源码下载
Oct 20 Javascript
JavaScript实现页面跳转的几种常用方式
Nov 28 Javascript
JavaScript控制浏览器全屏及各种浏览器全屏模式的方法、属性和事件
Dec 20 Javascript
vue.js异步上传文件前后端实现代码
Aug 22 Javascript
AngularJS实现图片上传和预览功能的方法分析
Nov 08 Javascript
react-router v4如何使用history控制路由跳转详解
Jan 09 Javascript
如何获取TypeScript的声明文件.d.ts
May 01 Javascript
jQuery 更改checkbox的状态,无效的解决方法
Jul 22 #Javascript
Javascript字符串常用方法详解
Jul 21 #Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
Jul 21 #Javascript
javascript实现滚动效果的数字时钟实例
Jul 21 #Javascript
如何用JS判断两个数字的大小
Jul 21 #Javascript
AngularJs基本特性解析(一)
Jul 21 #Javascript
jQuery表单验证插件解析(推荐)
Jul 21 #Javascript
You might like
php启动时候提示PHP startup的解决方法
2013/05/07 PHP
ThinkPHP数据操作方法总结
2015/09/28 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
Microsoft Ajax Minifier 压缩javascript的方法
2010/03/05 Javascript
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
JQuery ztree 异步加载实例讲解
2016/02/25 Javascript
Dojo获取下拉框的文本和值实例代码
2016/05/27 Javascript
详解AngularJS controller调用factory
2017/05/19 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
2017/10/16 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
vue打包相关细节整理(小结)
2018/09/28 Javascript
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
[02:07]DOTA2超级联赛专访BBC:难忘网吧超神经历
2013/06/09 DOTA
[59:07]海涛为你详解DOTA2新版本“贤哲秘契”
2014/11/22 DOTA
python函数中return后的语句一定不会执行吗?
2017/07/06 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
TensorFlow的权值更新方法
2018/06/14 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
详解Django中间件执行顺序
2018/07/16 Python
Python中注释(多行注释和单行注释)的用法实例
2019/08/28 Python
Python:二维列表下标互换方式(矩阵转置)
2019/12/02 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
使用CSS3制作倾斜导航条和毛玻璃效果
2017/09/12 HTML / CSS
专科毕业生学习生活的自我评价
2013/10/26 职场文书
中秋晚会活动方案
2014/08/31 职场文书
酒店管理专业毕业生自我鉴定
2014/09/29 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
工作年限证明范本
2015/06/15 职场文书
什么是clearfix (一文搞清楚css清除浮动clearfix)
2023/05/21 HTML / CSS