原生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 相关文章推荐
js实现的日期操作类DateTime函数代码
Mar 16 Javascript
window.location的重写及判断location是否被重写
Sep 04 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
Oct 11 Javascript
使用js获取图片原始尺寸
Dec 03 Javascript
javascript生成不重复的随机数
Jul 17 Javascript
js实现汉字排序的方法
Jul 23 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
Dec 04 Javascript
微信小程序 template模板详解及实例
Feb 21 Javascript
本地搭建微信小程序服务器的实现方法
Oct 27 Javascript
vue 中Virtual Dom被创建的方法
Apr 15 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
Jan 22 Javascript
jquery实现直播视频弹幕效果
Feb 25 jQuery
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
推荐25款php中非常有用的类库
2014/09/29 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
JavaScript 输入框内容格式验证代码
2010/02/11 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
JS快速实现移动端拼图游戏
2016/09/05 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
jquery.validate表单验证插件使用方法解析
2016/11/07 Javascript
jquery中each循环的简单回滚操作
2017/05/05 jQuery
JavaScript判断浏览器和hack滚动条的写法
2017/07/23 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
element-ui 上传图片后清空图片显示的实例
2018/09/04 Javascript
Vue CLI2升级至Vue CLI3的方法步骤
2019/05/20 Javascript
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
Python目录和文件处理总结详解
2019/09/02 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
澳大利亚领先的优质葡萄酒拍卖会:Langton’s Fine Wines
2019/03/24 全球购物
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
介绍一下write命令
2012/09/24 面试题
金融专业推荐信
2013/11/14 职场文书
英文自荐信
2013/12/15 职场文书
个人简历自我评价
2014/02/02 职场文书
物流毕业生个人的自我评价
2014/02/13 职场文书
工程售后服务方案
2014/06/08 职场文书
党员活动总结
2015/02/04 职场文书
员工辞职信怎么写
2015/02/27 职场文书
三方合作意向书范本
2015/05/09 职场文书
人事任命书范本
2015/09/21 职场文书
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL