原生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正则表达式来格式化XML内容
Jul 04 Javascript
JS实现点击链接取消跳转效果的方法
Jan 24 Javascript
原生javascript实现DIV拖拽并计算重复面积
Jan 02 Javascript
谈谈jQuery Ajax用法详解
Nov 27 Javascript
轻松5句话解决JavaScript的作用域
Jul 15 Javascript
js实现文本上下来回滚动
Feb 03 Javascript
轻松学习Javascript闭包
Mar 01 Javascript
JS实现向iframe中表单传值的方法
Mar 24 Javascript
浅谈webpack 自动刷新与解析
Apr 09 Javascript
详解vue如何使用rules对表单字段进行校验
Oct 17 Javascript
vue实现的网易云音乐在线播放和下载功能案例
Feb 18 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
Apr 28 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 a simple smtp class
2007/11/26 PHP
使用php shell命令合并图片的代码
2011/06/23 PHP
PHP 转义使用详解
2013/07/15 PHP
PHP中isset()和unset()函数的用法小结
2014/03/11 PHP
PHP实现服务器状态监控的方法
2014/12/09 PHP
php利用fsockopen GET/POST提交表单及上传文件
2017/05/22 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
phpcms实现验证码替换及phpcms实现全站搜索功能教程详解
2017/12/13 PHP
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
js 创建书签小工具之理论
2011/02/25 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
2013/11/05 Javascript
巧用jquery解决下拉菜单被Div遮挡的相关问题
2014/02/13 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
详解Angular4 路由设置相关
2017/08/26 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
详解如何利用Cython为Python代码加速
2018/01/27 Python
Python 将pdf转成图片的方法
2018/04/23 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
python源文件的字符编码知识点详解
2021/03/04 Python
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
抽象方法、抽象类怎样声明
2014/10/25 面试题
高一英语教学反思
2014/01/22 职场文书
消防安全责任书范本
2014/04/15 职场文书
品牌服务方案
2014/06/03 职场文书
学校社会实践活动总结
2014/07/03 职场文书
工地材料员岗位职责
2015/04/11 职场文书
课改心得体会范文
2016/01/25 职场文书
未来,这5大方向都很适合创业
2019/07/22 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
关于Mybatis中SQL节点的深入解析
2022/03/19 Java/Android
在Python 中将类对象序列化为JSON
2022/04/06 Python