原生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的点击链接插入链接内容的代码
Jul 31 Javascript
JS在textarea光标处插入文本的小例子
Mar 22 Javascript
jQuery学习笔记之 Ajax操作篇(一) - 数据加载
Jun 23 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
Apr 12 Javascript
利用JavaScript脚本实现滚屏效果的方法
Jul 07 Javascript
jquery实现无刷新验证码的简单实例
May 19 Javascript
JavaScript的Vue.js库入门学习教程
May 23 Javascript
JavaScript中的操作符类型转换示例总结
May 30 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
Feb 23 Javascript
jquery中封装函数传递当前元素的方法示例
May 05 jQuery
微信小程序8种数据通信的方式小结
Feb 03 Javascript
javascript实现获取中文汉字拼音首字母
May 19 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目录遍历函数opendir用法实例
2014/11/20 PHP
PHP简单操作MongoDB的方法(安装及增删改查)
2016/05/26 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
tp5框架使用cookie加密算法实现登录功能示例
2020/02/10 PHP
用javascript实现分割提取页面所需内容
2007/05/09 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
Vue.js开发环境搭建
2016/11/10 Javascript
微信小程序 数据封装,参数传值等经验分享
2017/01/09 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
JS+HTML5 Canvas实现简单的写字板功能示例
2018/08/30 Javascript
Vue CLI2升级至Vue CLI3的方法步骤
2019/05/20 Javascript
Vue实现图片轮播组件思路及实例解析
2020/05/11 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
python服务器端收发请求的实现代码
2014/09/29 Python
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
Python类属性与实例属性用法分析
2015/05/09 Python
python利用requests库模拟post请求时json的使用教程
2018/12/07 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
2020/05/13 Python
基于python 将列表作为参数传入函数时的测试与理解
2020/06/05 Python
python中判断文件结束符的具体方法
2020/08/04 Python
html5页面结构_动力节点Java学院整理
2017/07/10 HTML / CSS
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
台湾家适得:Homeget
2019/02/11 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
高中生自我鉴定范文
2013/10/30 职场文书
优秀员工年终发言演讲稿
2014/01/01 职场文书
公司联欢会策划方案
2014/05/19 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
selenium.webdriver中add_argument方法常用参数表
2021/04/08 Python
JavaScript利用html5新方法操作元素类名详解
2021/11/27 Javascript
十大最强水系宝可梦,最美宝可梦排第三,榜首大家最熟悉
2022/03/18 日漫
golang实现浏览器导出excel文件功能
2022/03/25 Golang