原生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 相关文章推荐
jquery插件冲突(jquery.noconflict)解决方法分享
Mar 20 Javascript
js实现下拉框选择要显示图片的方法
Feb 16 Javascript
javascript中CheckBox全选终极方案
May 20 Javascript
七夕情人节丘比特射箭小游戏
Aug 20 Javascript
Bootstrap的图片轮播示例代码
Aug 31 Javascript
JavaScript数据类型学习笔记
Jan 25 Javascript
Vue.js实现无限加载与分页功能开发
Nov 03 Javascript
使用bootstrap插件实现模态框效果
May 10 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
Oct 25 Javascript
jQuery插件Validation表单验证详解
May 26 jQuery
JavaScript中工厂函数与构造函数示例详解
May 06 Javascript
详解async/await 异步应用的常用场景
May 13 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生成sitemap.xml地图函数
2013/11/13 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
php跨站攻击实例分析
2014/10/28 PHP
ThinkPHP实现登录退出功能
2017/06/29 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
php 命名空间(namespace)原理与用法实例小结
2019/11/13 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
Javascript中的call()方法介绍
2015/03/15 Javascript
js实现鼠标经过表格行变色的方法
2015/05/12 Javascript
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
深入理解jquery中extend的实现
2016/12/22 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
微信小程序数据存储与取值详解
2018/01/30 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
python基于pyDes库实现des加密的方法
2017/04/29 Python
使用Python读取大文件的方法
2018/02/11 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
学年自我鉴定范文
2013/10/01 职场文书
升职自荐书范文
2013/11/28 职场文书
高中化学教学反思
2014/01/13 职场文书
英语自我评价范文
2014/01/24 职场文书
大学毕业自我评价
2014/02/02 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
庆七一宣传标语
2014/10/08 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python
JavaScript选择器函数querySelector和querySelectorAll
2021/11/27 Javascript