框架实战-day1

HTML5常用框架

前言

  • 随着HTML5规范的不断完善,围绕着这一生态有很多实用的框架,极大的提高了我们的开发效率,常见的框架代表有:UI层面的有Bootstrap、Yui、JqueryUI、CSS3Lib等,JS层面的有JQuery、Zeptojs、Angularjs、React、Vuejs等,还有很多常用的动画库、字体图标,比如:Animate、Wow、Iconfont、Iconmoon等。

  • 这些前端框架典型的特点:简单易用、相通性强,我们可以在学习一个框架后快速上手其他框架。

一、 Animate.css

图1
  • Animate.css是一个css动画样式库,其目标是让CSS动画像喝水一样容易(Just-add-water CSS Animation)

    • animate.css is a bunch of cool, fun, add cross-brower animations foy you to use in your projects. Greate for emphasis, home pages, sliders, and general jus-add-water-awesomeness.(animate.css是有一堆狂拽酷炫吊炸天、跨浏览器的动画特效的综合动画库)
    • animate.css是一个来自国外的CSS3动画库,它预设了抖动(shake)、闪烁(flash)、弹跳(bounce)、翻转(flip)、旋转(rotateIn/rotateOut)、淡入淡出(fadeIn/fadeOut)等多达70多种动画特效,几乎包含了所有常见的动画特效。
    • 重点:浏览器兼容,animate.css底层是通过css3实现的,当然是只兼容支持CSS3 animate属性的浏览器: IE10+、Firefox、Chrome、Opera、Safari。
    • 官方演示:https://daneden.github.io/animate.css/
    • 案例演示:登录界面特效
  • Animate.css的具体使用

  • 引入文件

  <link rel="stylesheet" href="animate.min.css">
  • 给要做动画的HTML标签添加上相对应的类,比如:
   <div class="box myAnimated flip"></div>
  • 注意:类animated的作用是控制动画的持续时间,是所有动画的前提条件, 在其后面的类则为动画的效果类。

思考?

  • 通过Animate.css只给我们省去了一部分效果动画,其他的还需要用js/jQuery来手写,能不能够再化简一些?
Snip20170204_6.png
  • World of Warcraft可以帮助我们解决这个问题。

二、WOW.js

wow-logo.jpg
  • 核心作用:让页面滚动更有趣;

    • 通过WOW.js,可以在页面逐渐向下滚动的过程中逐渐释放这些动画效果。也就是说:当我们向下滚动页面时,可以省去很多判断条件,让CSS动画逐渐展示出来。
  • 特点

    • 轻量级类库, 不依赖jQuery,超简单的安装和使用,与animate.css配合,只需要短短几行代码就可以实现很多特效。
    • 容易定制,我们可以改变动画去设置喜欢的风格、延迟、长度、偏移和迭代等等。
  • 兼容性考虑

    • 因为,WOW.js要和animate.css配合使用,所有其也只兼容支持CSS3 animate属性的浏览器:IE10+、Firefox、Chrome、Opera、Safari。
  • 如何使用?

  • 引入文件

  <link rel="stylesheet" href="animate.min.css">
  <script src="wow.min.js"></script>
  • 在相对的HTML标签中通过类进行引用
  <div class="wow slideInLeft"></div>
  <div class="wow slideInRight"></div>
  • 在JavaScript中进行初始化
  new WOW().init();
  • 案例演练:WOW初体验

  • WOW.js常用的属性

    • data-wow-delay: 动画开始前延迟
    • data-wow-duration: 动画持续时长
    • data-wow-iteration: 动画重复次数
    • data-wow-offset: 距离浏览器底部到隐藏框顶部的距离(偏移量)
  • 来搞定它?
  • 可以加入data-wow-duration(动画持续时间)和data-wow-delay(动画延迟时间)等属性。
  • 比如
   <div class="wow slideInLeft" data-wow-duration="3s" data-wow-delay="1s"></div>
   <div class="wow slideInRight" data-wow-iteration="5"></div>
  • data-wow-offset

    • 用于决定当前的元素在滚动的时候到达怎样的位置出现(是在滚动之前出现、滚动之后出现,还是滚动的时候出现),比如:http://www.520it.com/special/html5
    Snip20170204_7.png
  • WOW的默认配置参数

  var wow = new WOW({
     boxClass: 'wow',   // 动画元素的CSS类(默认类名wow)
     animateClass:'animated', // 动画CSS类 (默认类名animated)
     offset: 0,  // 距离可视区域多少开始执行动画(默认为0)
     mobile: true, // 是否在移动设备上执行动画 (默认是true)
  });
  
  wow.init();
  • WOW.js存在怎样的问题?
  • WOW.js实例的动画只能加载一次,如果要重新执行动画必须要进行刷新。
  • 但是在实际开发中,更多时候动画是只加载一次,否则会造成视觉错乱。那如果要多次重复展现动画该如何处理呢?

三、scrollReveal

Snip20170204_8.png
  • scrollReveal是一个兼容PC端和移动设备的滚动动画库。不同的是 WOW.js 的动画只播放一次,而 scrollReveal.js 的动画可以播放一次或无限次;

  • 特点:

    • scrollReveal同时兼容PC端和移动端;
    • 0依赖(不依赖于jQuery,也不依赖于animate.css);
    • 定制性高,使用简单方便快捷。
  • 浏览器兼容:

    • 虽然scrollReveal.js不依赖于animate.css,但是它的动画也是用CSS3创建的,所以依然需要支持HTML5和CSS3比较好的浏览器,比如: IE10+、Firefox、Chrome、Opera、Safari。


      Snip20170204_9.png
  • 官网:https://scrollrevealjs.org/

  • 使用方法:

    • 引入文件:
      <script src="js/scrollReveal.js"></script>
    
    • html:
      <div class="box"></div>
    
    • JavaScript:
      window.onload = function () {
          window.sr = ScrollReveal();
          sr.reveal('.box');
      }
    
  • 常用参数:

  var config = {
                reset: false,   // 滚动鼠标时,动画开关
                origin: 'bottom', // 动画开始的方向
                duration: 500,   // 动画持续时间
                delay: 0, // 延迟
                rotate: {x:0, y:0, z:0},  // 过度到0的初始角度
                opacity: 0, // 初始透明度
                scale: 0.9, //缩放
                easing: 'cubic-bezier(0.6, 0.2, 0.2, 1)', // 缓动'ease', 'ease-in-out','linear'...
                // 回调函数
                beforeReveal: function(domEl){},
                beforeReset: function(domEl){},
                afterReveal: function(domEl){},
                afterReset: function(domEl){}
  };
  
  window.sr = ScrollReveal();
  sr.reveal('.sr', config);
  • 案例演示:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{
            margin: 0;
            padding: 0;
            border: 0;
            list-style: none;
        }

        .box{
            width: 1230px;
            margin: 0 auto;
            overflow: hidden;
        }

        ul{
            float: left;
            width: 300px;
            margin-right: 10px;
        }

        ul:last-child{
            margin-right: 0;
        }
    </style>
</head>
<body>
   <div class="box">
       <ul>
           <li class="sr">![](images/01.jpg)</li>
           <li class="sr">![](images/02.jpg)</li>
           <li class="sr">![](images/03.jpg)</li>
           <li class="sr">![](images/04.jpg)</li>
           <li class="sr">![](images/05.jpg)</li>
           <li class="sr">![](images/06.jpg)</li>
           <li class="sr">![](images/07.jpg)</li>
           <li class="sr">![](images/08.jpg)</li>
           <li class="sr">![](images/09.jpg)</li>
           <li class="sr">![](images/10.jpg)</li>
       </ul>
       <ul>
           <li class="sr">![](images/11.jpg)</li>
           <li class="sr man">![](images/12.jpg)</li>
           <li class="sr">![](images/13.jpg)</li>
           <li class="sr">![](images/14.jpg)</li>
           <li class="sr">![](images/15.jpg)</li>
           <li class="sr">![](images/16.jpg)</li>
           <li class="sr">![](images/17.jpg)</li>
           <li class="sr">![](images/18.jpg)</li>
           <li class="sr">![](images/19.jpg)</li>
           <li class="sr">![](images/20.jpg)</li>
       </ul>
       <ul>
           <li class="sr">![](images/31.jpg)</li>
           <li class="sr">![](images/32.jpg)</li>
           <li class="sr">![](images/33.jpg)</li>
           <li class="sr">![](images/34.jpg)</li>
           <li class="sr">![](images/35.jpg)</li>
           <li class="sr">![](images/36.jpg)</li>
           <li class="sr">![](images/37.jpg)</li>
           <li class="sr">![](images/38.jpg)</li>
           <li class="sr">![](images/39.jpg)</li>
           <li class="sr">![](images/40.jpg)</li>
       </ul>
       <ul>
           <li class="sr">![](images/01.jpg)</li>
           <li class="sr">![](images/02.jpg)</li>
           <li class="sr">![](images/03.jpg)</li>
           <li class="sr">![](images/04.jpg)</li>
           <li class="sr">![](images/05.jpg)</li>
           <li class="sr">![](images/06.jpg)</li>
           <li class="sr">![](images/07.jpg)</li>
           <li class="sr">![](images/08.jpg)</li>
           <li class="sr">![](images/09.jpg)</li>
           <li class="sr">![](images/10.jpg)</li>
       </ul>
   </div>
   <script src="js/scrollreveal.min.js"></script>
   <script>
       window.onload = function () {
           var config = {
               reset: true,   // 滚动鼠标时,动画开关
               origin: 'bottom', // 动画开始的方向
               duration: 500,   // 动画持续时间
               delay: 0, // 延迟
               rotate: {x:0, y:0, z:0},  // 过度到0的初始角度
               opacity: 0, // 初始透明度
               scale: 0.9 //缩放
           };

           var config2 = {
               reset: true,   // 滚动鼠标时,动画开关
               origin: 'bottom', // 动画开始的方向
               duration: 1000,   // 动画持续时间
               delay: 0, // 延迟
               rotate: {x:0, y:0, z:0},  // 过度到0的初始角度
               opacity: 0.5, // 初始透明度
               scale: 10 //缩放
           };

           window.sr = ScrollReveal();
           sr.reveal('.sr', config);
           sr.reveal('.man', config2);
       }
   </script>
</body>
</html>

四、scrollReveal 和 WOW的区别和联系

  • 它们都不依赖jQuery;
  • wow依赖于animate.css ,ScrollReveal不依赖任何其他插件或者库;
  • wow的释放动画,只能够实现一次,而ScrollReveal可以无限次使用;
  • ScrollReveal 参数相对比较多,比较复杂些;
  • 实际工作中,用wow比较多。

五、LESS

Snip20170204_10.png
  • 什么是LESS?

Less 是一门 CSS 预处理语言,使用了类似CSS的语法,为CSS赋予了动态语言的特征。它扩展了 CSS 语言,增加了变量、Mixin(混合)、嵌套、函数和运算等特性,使 CSS 更易维护和扩展。此外,Less 可以运行在 Node 或浏览器端。

  • 一句话:用类似JS的语法去写CSS

  • LESS的特点:

    • 作为CSS的一种扩展,LESS CSS不仅向下兼容CSS的语法,而且连新增的特性也是使用CSS语法。这样的设置使得学习LESS非常轻松,而且你可以在任何时候回退到CSS。
  • 变量:单独定义一系列通用的样式,然后在需要的时候去调用。所以在做全局样式调整的时候我们可能只需要修改几行代码就可以了

       // JS中定义变量
       var name = '张三';
       
       // LESS中定义变量
       @color:red;
       h1{
          color: @color;
       }
    
  • 嵌套

    • 在一个选择器中嵌套另一个选择器来实现继承,这样很大程度上减少了代码量,并且代码看起来更加清晰。
      div{
        h1{
           color:red;
        }
      }
    

    注意:嵌套一般情况下,不要超过3层

  • 运算

    • 运算提供了加、减、乘、除操作,其他复杂的运算交给函数;通常我们可以做属性值和颜色的运算,这样就可以实现属性值之间的复杂关系。

    注意:运算符与值之间必须以空格分开。

      @w:500px;
      
      div{
        h1{
          width: @w - 100;
        } 
      }
      
      h1{
        width: @w;
        border: 1px solid #000;
      }
    
  • 混合(Mixins)

    • 混合可以将一个定义好的class A轻松的引入到class B中,从而简单的实现class B 继承class A的所有属性。我们还可以带参数的调用,就像使用函数一样。
    图片 1.png
    • 注意:混合的使用就和js的自定义函数类似,首先 混合 必须前面是以 . +混合名称开始
    • 结构:.名称(变量){}
    • 可以有默认值,也可以没有默认值,没有的话,在调用的时候必须传参,有默认值的时候就可以不用传递参数;
    • 多个参数之间和js一样,用逗号(,) 隔开
  • 函数

    • LESS中的函数 - 映射了JavaScript函数代码,如果你愿意的话,可以操纵属性值。

    • 比如:鼠标移上亮度增加20%。


      图片 2.png
    • 需要查找的时候,直接查文档就可以了

    • 比如:

     saturate(@color, 10%); // 饱和度增加 10%
     desaturate(@color, 10%); // 饱和度降低 10%
     lighten(@color, 10%); // 亮度增加 10%
     darken(@color, 10%); // 亮度降低 10%
     fadein(@color, 10%); // 透明度增加 10%
     fadeout(@color, 10%); // 透明度降低 10%
     fade(@color, 50%); // 设定透明度为 50%
     spin(@color, 10); // 色相值增加 10
     ……
    
  • 匹配模式

    • 类似js中的if else判断,只有匹配成功才能起作用
    图片 3.png

    注意:匹配模式中,定义的模式名称都是一样的,只是参数不一样,调用的时候只需选择对应的参数就可以了。

  • 如何使用LESS?

    • 方式一:客户端直接调用
    <link rel="stylesheet/less" href="less/less.less">
    <!--用于编译LESS的-->
    <script type="text/javascript" src="js/less.min.js"></script>
    

    注意:必须在服务器环境中才能生效,动态编译注入虚拟DOM或者内存中,类似ajax。
    开发中常用的服务器组合:WAPM

    • 方式二:预编译(提前编译)

      • 在代码编辑器中,按照LESS的语法规则写好LESS文件;
      • 使用编译工具把.less文件编译成.css文件;
      • 把编译后的css文件引入到页面即可。

      编译工具:Koala

      Snip20170205_11.png
  • 如何在一个LESS文件中导入另一个LESS文件?
   @import "less.less";   // 注意:less文件扩展名可选
  • 其他补充
  • // 不会被编译器编译的注释
  • /**/ 是可以被编译器编译的 注释
  • ~’’ 表示的是禁止被编译
  • & 表示选择所有的父级元素
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 框架一 :: Animate.css Animate.css是一个css动画样式库,可以减少我们的开发时间.它预设...
    西巴撸阅读 2,514评论 0 5
  • HTML5常用框架 前言 随着HTML5规范的不断完善,围绕着这一生态有很多实用的框架,极大的提高了我们的开发效率...
    方克己阅读 1,204评论 0 3
  • 前言: 随着HTML5规范的不断完善,围绕着这一生态有很多实用的框架,极大的提高了我们的开发效率,常见的框架代表有...
    秒签T阅读 337评论 0 0
  • 1 《爸爸去哪儿》第五季,刚开始看的时候,不明白为什么小小春家庭的呼声最高。 和同是男孩子的嗯哼相比,小小春的父亲...
    小花妈妈妈阅读 552评论 0 0
  • 作者:毛志杰(家长课堂) 有的孩子天生“嘴甜”,不用人教,见人就“哥哥长、姐姐短”;而有的孩子好象天生“嘴不甜”,...
    毛哥说教育阅读 264评论 2 2