原生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 相关文章推荐
juqery 学习之四 筛选查找
Nov 30 Javascript
js完美的div拖拽实例代码
Jan 22 Javascript
Javascript中的几种URL编码方法比较
Jan 23 Javascript
jQuery中trigger()与bind()用法分析
Dec 18 Javascript
BootStrap入门教程(二)之固定的内置样式
Sep 19 Javascript
VUE多层路由嵌套实现代码
May 15 Javascript
JS中正则表达式要注意lastIndex属性
Aug 08 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
Aug 14 jQuery
vue组件实现文字居中对齐的方法
Aug 23 Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
Apr 19 Javascript
vue+vant实现购物车全选和反选功能
Nov 17 Vue.js
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
Parse正式发布开源PHP SDK
2014/08/11 PHP
php中in_array函数用法探究
2014/11/25 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
PHP registerXPathNamespace()函数讲解
2019/02/03 PHP
IE下通过a实现location.href 获取referer的值
2014/09/04 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
2015/02/02 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
JavaScript中SetInterval与setTimeout的用法详解
2015/11/10 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
微信小程序实现缓存根据不同的id来进行设置和读取缓存
2017/06/12 Javascript
vue中七牛插件使用的实例代码
2017/07/28 Javascript
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
python实现外卖信息管理系统
2018/01/11 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
python爬取指定微信公众号文章
2018/12/20 Python
Python切片操作去除字符串首尾的空格
2019/04/22 Python
手把手教你使用Python创建微信机器人
2019/04/29 Python
python爬虫之遍历单个域名
2019/11/20 Python
python numpy库np.percentile用法说明
2020/06/08 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
is_file和file_exists效率比较
2021/03/14 PHP
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
本科生详细的自我评价
2013/09/19 职场文书
销售行业个人求职自荐信
2013/09/25 职场文书
体育教师工作总结的自我评价
2013/10/10 职场文书
面试求职的个人自我评价
2013/11/16 职场文书
小学生演讲稿
2014/01/12 职场文书
投标诚信承诺书
2014/05/26 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
张丽莉观后感
2015/06/16 职场文书
nginx设置资源请求目录的方式详解
2022/05/30 Servers