作者: admin

  • 在css中使用Base64编码图片减少服务器请求次数。

    图片拼接 请求次数 CSS sprites

    图片 代码

    不高于200KB的单张图片的所需载入时间基本是差不多的,如果我们的CSS载入了很多的小图片,我们完全可以使用Base64图片。
    Base64图片是将图片转换成加密的代码,可以存放于CSS文件当中,和CSS文件一起被请求,可以加快页面的加载速度。
    Base64图片转换成代码之后存放在文本文档里,占得空间会比原图片大,所以如果图片太大,会适得其反,拖慢加载速度。

    推荐一个在线将图片转换成Base64编码的网址:http://dopiaza.org/tools/datauri/index.php

    1,选择要转码的图片

    base1

     

    2,点击“Generate Date URL”开始转码

    base2

     

    3,全选编码

    base3

    4,替换掉原来的CSS图片

    base4

    5,将复制的编码粘贴到background属性中

    base5

     

    个人总结:

    此方法不是为了加密图片,而是减少服务器的请求次数,比较适用于很多体积很小图片才使用。其实使用图片拼接也可以。

    别人的总结:

    使用base64:URL的优缺点

    个人觉得base64:URL传输图片文件的好处在于:

    1. 减少了HTTP请求
    2. 某些文件可以避免跨域的问题
    3. 没有图片更新要重新上传,还要清理缓存的问题

    不足在于:

    1. 浏览器支持
      使用base64编码图片作为背景图片的这种技术IE6/IE7浏览器是不支持的(IE9浏览器IE7模式下支持。对于目前PC页面,兼容性问题使没有文件上传以及无需更新缓存的优点不存在了。
    2. 增加了CSS文件的尺寸
      base64编码图片本质上是将图片的二进制大小以一些字母的形式展示,例如一个1024字节的图片,base64编码后至少1024个字符,这个大小会被完全嵌入到CSS文件中(不过幸运的是也可以被gzip了,而图片文件被gzip效果不明显)。
    3. 编码成本
      图片完成后还需要base64编码,目前估计手工完成的多,因此,增加了一定的工作量,虽然不多。

    优缺点权衡下的实际应用价值

    权衡上面所展示的优缺点,貌似base64:URL图片没有什么用武之地啊,实际上非也,有一种情况时有base64编码作为background-image背景图片利要远大于弊的。何种情况呢?

    在web页面制作的时候,由于某些现实原因,我们可以会用到下面这一类图片:

    • 这类图片不能与其他图片以CSS Sprite的形式存在,只能独行
    • 这类图片从诞生之日起,基本上很少被更新
    • 这类图片的实际尺寸很小
    • 这类图片在网站中大规模使用

    参考文章

    张鑫旭的个人博客
    http://www.bgbk.org/css-base64.html

  • JS禁止苹果iphone浏览器拖动反弹(橡皮筋效果)

    禁用 苹果 iphone 拖拽 反弹 弹簧 效果 组织 默认行为

    tanhuang

    解决一:

    $(document).ready(function(){ 
     
       function stopScrolling( touchEvent ) { 
        touchEvent.preventDefault(); 
       } 
       document.addEventListener( 'touchstart' , stopScrolling , false ); 
       document.addEventListener( 'touchmove' , stopScrolling , false ); 
     
    
    });

     

    解决二(推荐):

    禁止:

    $('html,body').css({overflow:'hidden',height:'100%',position:'fixed',left:0,top:0});

     

    允许:

    $('html,body').css({overflow:'auto',height:'auto',position:'static',left:'auto',top:'auto'});
  • velocity.js中文手册 velocity取代jQuery animate()的插件

    Velocity.js笔记

    velocity.min 1.2.1

    velocity.min 1.2.3

    目前最新已经出到了1.5.0。至于修复或添加了什么可以到github看看

    https://github.com/julianshapiro/velocity

    本地下载:velocity_1.5.0.zip

     

    Velocity.js语法跟jquery中使用animate()的语法一样,但仅兼容IE8以上浏览器包括IE8移动设备上支持Android 2.3,
    特点是可以实现颜色渐变、transform、循环(loops)、控制加速度(easings)、支持SVG和滚动(scrolling)。
    甚至比jquery自带的animate和CSS属性transitions好。

    还有另一款动画库GSAP:TweenMax.js
    velocity总体代码:

    $element.velocity({ 
       width: "500px",
       property2: value2
    }, {
     /* 以下如果没有做特别设置的话都是默认属性 */
     duration: 400, // 一系列动作在多少时间内完成
     easing: "swing", //动画加速度
     queue: "", //动画队列,要必须等某个动作执行完后才能执行某个动作。
     begin: undefined, //动画执行前,执行此函数
     progress: undefined,//动画执行进度
     complete: undefined,//动画执行后,执行此函数
     display: none, //动画执行完后,隐藏。配合opacity: 0使用就是淡入淡出效果
     visibility: hidden,//动画执行完后,隐藏。配合opacity: 0使用就是淡入淡出效果
     loop: true / 2, //循环次数,完成动作之后在按原来动作后退,算一次。
     delay: 2000,//动作多少秒后开始执行
     mobileHA: true
    });

     

     

    velocity语法也可以像jquery语法一样

    $element.velocity({'width':'500'},5000, "swing",function() { alert("Hi")});

     

    支持的单位有px, em, rem, %, deg,vw/vh 如果不写单位默认是px,
    也支持运算累加例如:

    $element.velocity({ 
     top: 50, // 默认加px单位
     left: "50%",
     width: "+=5px", //原来宽度加上5 
     height: "*=2" // 原来高度乘以2
    });

     

     

    动画队列写法例如:

    $("div")
     .velocity({ width: 75 }, 1500) //先执行
     .velocity({ height: 0 }, 1250); //之后执行

     

     

    queue动画队列写法,例如:

    如果动画中的queue属性一旦设置了值,动画就不会执行。

    $("div")
     .velocity({ translateX: 75 }, { queue: "a" }) //给动画queue命名 'a'
     .velocity({ translateY: 75 }, { queue: "a" })
     .velocity({ width: 50 }, { queue: "b" })
     .velocity({ height: 0 }, { queue: "b" })
    $("div").dequeue("a"); //需要dequeue调用才能执行a的动画,而且是按先后顺序执行的

    加速度设置

    $element.velocity({ width: 50 }, "easeInSine");
    $element.velocity({ width: 50 }, [ 0.17, 0.67, 0.83, 0.67 ]);
    $element.velocity({ width: 50 }, [ 250, 15 ]);
    $element.velocity({ width: 50 }, [ 8 ]);

    速度效果具体查看http://easings.net/zh-cn

     

    也可以单独的为某一个属性设置变化加速的效果。
    //更强的一个功能就是在做异步动画的时候,能为指定一个属性设置加速效果,如
    $element.velocity({
     borderBottomWidth: [ "2px", "spring" ], // Uses "spring"
     width: [ "100px", [ 250, 15 ] ], // Uses custom spring physics
     height: "100px" // Defaults to easeInSine, the call's default easing
    }, { 
     easing: "easeInSine" // Default easing
    });

    也可以自己自定义加速效果
    p:百分比(十进制值)
    opts:The options object passed into the triggering Velocity call(可选)
    tweenDelta:动画开始到结束的差值(可选)

    $.Velocity.Easings.myCustomEasing = function (p, opts, tweenDelta) {
     return 0.5 - Math.cos( p * Math.PI ) / 2;
    };

     

    velocity内置速度效果:

    ease            [.25,.1,.25,1]
    ease-in         [.42,0,1,1]
    ease-out        [0,0,.58,1]
    ease-in-out     [.42,0,.58,1]
    easeInSine      [.47,0,.745,.715]
    easeOutSine     [.39,.575,.565,1]
    easeInOutSine   [.445,.05,.55,.95]
    easeInQuad      [.55,.085,.68,.53]
    easeOutQuad     [.25,.46,.45,.94]
    easeInOutQuad   [.455,.03,.515,.955]
    easeInCubic     [.55,.055,.675,.19]
    easeOutCubic    [.215,.61,.355,1]
    easeInOutCubic  [.645,.045,.355,1]
    easeInQuart     [.895,.03,.685,.22]
    easeOutQuart    [.165,.84,.44,1]
    easeInOutQuart  [.77,0,.175,1]
    easeInQuint     [.755,.05,.855,.06]
    easeOutQuint    [.23,1,.32,1]
    easeInOutQuint  [.86,0,.07,1]
    easeInExpo      [.95,.05,.795,.035]
    easeOutExpo     [.19,1,.22,1]
    easeInOutExpo   [1,0,0,1]
    easeInCirc      [.6,.04,.98,.335]
    easeOutCirc     [.075,.82,.165,1]
    easeInOutCirc   [.785,.135,.15,.86]

    没有我们想要的弹簧效果,但是velocity有自己的速度插件:velocity.easeplus

    效果图:http://yuichiroharai.github.io/easeplus-velocity/sample/

    该插件官网:https://github.com/yuichiroharai/easeplus-velocity 

    easeplus-velocity-master

     

     

    动画前执行

    $element.velocity({
     opacity: 0
    }, { 
     /* 执行动画前 记录所有动画 节点 数量 */
     begin: function(elements) { console.log(elements); }
    });

    动画结束后执行

    $element.velocity({
     opacity: 0
    }, { 
     /*执行动画后 记录所有动画 节点 数量 */
     complete: function(elements) { console.log(elements); }
    });

     

    强制统一设置执行时间

    //类似jquery的动画全局属性 $.fx.interval
    $.Velocity.mock = 10;

     

    设置进度

    $element.velocity({
     opacity: 0,
     tween: [ 10, 20 ] // 设置tweenValue数值10到20
    }, {
     duration: 100,
     progress: function(elements, complete, remaining, start, tweenValue) {
     elements //每一个关键帧的这个对象
     console.log((complete * 100) + "%"); //这动画完成的进度过程0%-100%
     console.log(remaining + "ms remaining!"); //这动画剩余多少时间完成100ms到0ms
     console.log("The current tween value is " + tweenValue)//自定义动画进度数值由20开始逐渐    到10。
     }
    });

    简写为:

    $element.velocity({
     tween: [ 0, 1000 ]
    }, { 
     easing: "spring",
     progress: function(elements, c, r, s, t) {
     console.log("The current tween value is " + t)
     }
    });

     

    推荐在移动设备开启true

    $element.velocity(propertiesMap, { mobileHA: false });

     

    循环次数

    $element.velocity({ height: "10em" }, { loop: 2 });
    $element.velocity({ height: "10em" }, { loop: true }); //无限循环

     

    每个动画间隔时间delay

    $element.velocity({ 
     height: "+=10em"
    }, { 
     loop: 4,
     delay: 100
    });

     

     

    fadeIn and fadeOut

    代替fadeOut()
    $element.velocity({ opacity: 0 }, { display: “none” }); //淡出 文档流不存在
    $element.velocity({ opacity: 0 }, { visibility: “hidden” }); //淡出 文档流存在

    fadeIn()
    $element.velocity({ opacity: 1 }, { display: “block” });

    或者

    $element
    .velocity(“fadeIn”, { duration: 1500 })
    .velocity(“fadeOut”, { delay: 500, duration: 1500 });
    slideUp and slideDown

    $element
     .velocity("slideDown", { duration: 1500 })
     .velocity("slideUp", { delay: 500, duration: 1500 });

     

    scroll参数(效果只兼容IE10以上)

    $element
     .velocity("scroll", { duration: 1500, easing: "spring" });
     //滚动条滚动到元素顶部

    例如:
    $(“#element3”).velocity(“scroll”, {
    container: $(“#container”),
    duration: 800,
    delay: 500
    });

    //#container是可滚动的区域css要有position: relative;
    #element3在#container内容中
    取代stop()
    stop() == .velocity(“stop”); //当前动作停止如果之前有动作过的仍然保留,后续有动作继续执行

    stop(true) ==.velocity(“stop”, true);  //所有动作停止如果之前有动作过的仍然保留,后续也不执行

    stop(true,true)==velocity(‘finish’,true) //当前瞬间完成,后续不执行

    .velocity(“finish”);  //当前瞬间完成,后续动作继续  (还比jquery多了一个效果)
    动画后退
    .velocity(“reverse”);
    translate位移

    $element.velocity({ 
     translateX: "200px", //X轴 位移
     translateY: "200px" //Y轴 
    });

    rotate旋转

    $element.velocity({ 
     rotateX: "200px", //X轴 位移
     rotateY: "200px" //Y轴 
     rotateZ: "200px"
    });

    scale拉伸

    $element.velocity({ 
     scaleX:'2', //宽为原来2倍
     scaleY:'2' //高为原来2倍
    });

     

     

    textShadowX, textShadowY, and textShadowBlur
    $element.velocity({ textShadowBlur: "10px" });

    .hook设置、获取2D,3D属性值 类似css()

    $.Velocity.hook($('div'),"translateX","200px"); //设置
    $.Velocity.hook($('div'),"translateY","200px"); //设置
    alert( $.Velocity.hook($('div'), "translateX") ) //获取

    支持函数传值

    $element.velocity({
     translateX: function(i, total) { 
       return i * 10;
     }
    });

    颜色渐变

    $('#ni').velocity({
      color:'#eff716', //字体颜色渐变
      backgroundColor:'#000', //背景颜色渐变
      backgroundColorAlpha: 0.2,//背景颜色透明度渐变
      colorRed: "50%", //红绿蓝三色中的红渐变,支持百分比渐变
      colorGreen: "+=150",
      colorBlue: "+=150",
      colorAlpha: 0.3 //字体颜色透明度渐变
     },4000);

     

    背景图片定位

    'background-position-x': ['-600px', '0px']    //0到-600px

     

     

    回调

    //对IE的兼容性不是很好
    $.Velocity.animate($('#ni'), { opacity: 0.5 },3000)
     .then(function(elements) { alert($(elements).attr('id')) }) //成功后执行
     .catch(function(error) { console.log("Rejected."); }); //失败后执行

     

     

    —————-高级应用————————–

    $('.c').velocity({
      translateX: function(index, num) { //除了直接设置值,还能添加方法,(索引,总数)类似$.each
         console.log(total);
         return (i * 20);
      }
     });
    
    效果是批量对class为.c的元素设置translateX值。
    其他属性也可以这么写,要举一反三。

     

    ——————-扩展组件———————–

    velocity.ui.js 扩展组件 (兼容IE8以上)

    有时候通过回调要完成一系列的动作例如
    $element1.velocity({ translateX: 100 }, 1000, function() {
       $element2.velocity({ translateX: 200 }, 1000, function() {
          $element3.velocity({ translateX: 300 }, 1000);
       });
    });

    引入velocity.ui.js组件,可以将代码写成:

    var mySequence = [
      { e: $element1, p: { translateX: 100 }, o: { duration: 1000 } },
      { e: $element2, p: { translateX: 200 }, o: { duration: 1000 } },
      { e: $element3, p: { translateX: 300 }, o: { duration: 1000 } }
    ];
    
    $.Velocity.RunSequence(mySequence); //执行以上动作

    如果在以上众多动作做中某一个动作不需要回调等待,而是开始时候就执行可以加上

    { e: $element2, p: { translateX: 200 }, o: { duration: 1000, sequenceQueue: false },
    //不需要等上一个动作,而是直接可以加载页面的时候就开始执行

    velocity.ui.js组件还为我们提供了跟animate.css类似的功能。

    $('.c').velocity('transition.slideUpIn', 
      { stagger: 2000,backwards: true,drag: true}//2秒回调一个效果,向后效果,动画紧凑
    )
    .delay(3150) //3.15秒后执行下一步
    .velocity({ opacity: 0 }, 750);

    案例:http://www.smashingmagazine.com/2014/06/18/faster-ui-animations-with-velocity-js/
    更多效果预览:http://julian.com/research/velocity/#uiPack

    如果内置的动画没有你想要的还可以自定义动画

    $.Velocity.RegisterUI("callout.zidingyi", {
        defaultDuration: 3000, //默认过渡时间
          calls: [ 
            [ { rotateZ: 1080 }, 0.50 ],
            [ { scaleX: 0.5 }, 0.25, { easing: "spring" } ],
            [ { scaleX: 1 }, 0.25, { easing: "spring" } ]
          ]
       });
    $('.c').velocity('callout.zidingyi'); //调用

     

     

     

    更多内容还需要上http://julian.com/research/velocity/

    http://velocityjs.org/
    案例下载

  • FullPage.js – 轻松实现全屏滚动(单页网站)效果

    FullPage.js 是一个简单而易于使用的插件,用来创建全屏滚动网站(也被称为单页网站)。除了可以创建全屏滚动效果以外,也可以给网站添加一些水平的滑块效果。能够自适应不同的屏幕尺寸,包括平板电脑和移动设备。

     

    主要功能:
    支持鼠标滚动
    支持前进后退和键盘控制
    多个回调函数
    支持手机、平板触摸事件
    支持 CSS3 动画
    支持窗口缩放
    窗口缩放时自动调整
    可设置滚动宽度、背景颜色、滚动速度、循环选项、回调、文本对齐方式等等

     

    fullpage

    下载

    fullPage.js-master (1)

     

    <link rel="stylesheet" href="http://cdn.dowebok.com/77/css/jquery.fullPage.css"> 
    
    <script src="http://cdn.staticfile.org/jquery/1.8.3/jquery.min.js"></script>
    <script src="http://cdn.dowebok.com/77/js/jquery.fullPage.min.js"></script> 
    
    $(function(){
     $('#dowebok').fullpage({
       sectionsColor: ['#1bbc9b', '#4BBFC3', '#7BAABE', '#f90']
     });
    }); 
    
    <div id="dowebok">
     <div class="section">
       <h3>第一屏</h3>
       <p>fullPage.js — 基本演示</p>
     </div>
    
     <div class="section">
       <div class="slide">
         <h3>第二屏的第一屏</h3>
       </div>
    
       <div class="slide">
         <h3>第二屏的第二屏</h3>
       </div>
    
       <div class="slide">
          <h3>第二屏的第三屏</h3>
       </div>
     </div>
    
     <div class="section">
       <h3>第三屏</h3>
     </div>
    
     <div class="section">
       <h3>第四屏</h3>
       <p>这是最后一屏</p>
     </div>
    
    </div>

    演示:http://www.dowebok.com/demo/2014/77/index2.html

     

     

     

     

    配置:

    //为每个section设置背景色
    sectionsColor: ["#f00","#0f0","#00f"],
    //用来控制slide幻灯片的箭头,设置为false,两侧的箭头会消失
    controlArrows: false,
    //每一页幻灯片的内容是否垂直居中
    verticalCentered: false,
    //字体是否随着窗口缩放而缩放
    resize: true,
    //页面滚动速度
    scrollingSpeed: 700,
    //定义锚链接,用户可以快速打开定位到某一页面;不需要加"#",不要和页面中任意的id和name相同
    anchors: ["page1","page2","page3"],
    //是否锁定锚链接
    lockAnchors: true,
    //定义section页面的滚动方式,需要引入jquery.easings插件
    easing:,
    //是否使用css3 transform来实现滚动效果
    css3: false,
    //滚动到最顶部后是否连续滚动到底部
    loopTop: true,
    //滚动到最底部后是否连续滚动到顶部
    loopBottom: true,
    //横向slide幻灯片是否循环滚动
    loopHorizontal: false,
    //是否循环滚动,不会出现跳动,效果很平滑
    continuousVertical: true,
    //是否使用插件滚动方式,设为false后,会出现浏览器自带的滚动条,将不会按页滚动
    autoScrolling: false,
    //是否包含滚动条,设为true,则浏览器自带的滚动条会出现,页面还是按页滚动,但是浏览器滚动条默认行为也有效
    scrollBar: true,
    //设置每个section顶部的padding,当我们要设置一个固定在顶部的菜单、导航、元素等时使用
    paddingTop: "100px",
    //设置每个section底部的padding,当我们要设置一个固定在底部的菜单、导航、元素等时使用
    paddingBottom: "100px",
    //固定的元素,为jquery选择器;可用于顶部导航等
    fixedElements: ".nav",
    //是否可以使用键盘方向键导航
    keyboardScrolling: false,
    //在移动设置中页面敏感性,最大为100,越大越难滑动
    touchSensitivity: 5,
    //设为false,则通过锚链接定位到某个页面不再有动画效果
    animateAnchor: false,
    //是否记录历史,可以通过浏览器的前进后退来导航
    recordHistory: true,
    //绑定菜单,设定相关属性和anchors的值对应后,菜单可以控制幻灯片滚动
    menu: '.nav',
    //是否显示导航,设为true会显示小圆点作为导航
    navigation: true,
    //导航小圆点的位置,可以设置为left或者right
    navigationPosition: right,
    //鼠标移动到小圆点上时显示出的提示信息
    navigationTooltips: ["第一页","第二页","第三页"],
    //是否显示当前页面小圆点导航的提示信息,不需要鼠标移上
    showActiveTooltip: true,
    //是否显示横向幻灯片的导航
    slidesNavigation: true,
    //横向幻灯片导航的位置,可以为top或者bottom
    slidesNavPosition: bottom,
    //内容超过满屏时是否显示滚动条,需要jquery.slimscroll插件
    scrollOverflow: true,
    //section选择器
    sectionSelector: ".section",
    //slide选择器
    slideSelector: ".slide"

     

     

    方法:

    调用方法,例如:$.fn.fullpage.moveTo(2); //跳转到第二页

    //向上滚动一页
    moveSectionUp();
    //向下滚动一页
    moveSectionDown();
    //滚动到第几页,第几个幻灯片;页面从1计算,幻灯片从0计算
    moveTo(wection,slide);
    //和moveTo一样,但是没有动画效果
    silentMoveTo(section,slide);
    //幻灯片向右滚动
    moveSlideRight();
    //幻灯片向左滚动
    moveSlideLeft();
    //动态设置autoScrolling配置项
    setAutoScrolling(boolean);
    //动态设置lockAnchors配置项
    setLockAnchors(boolean);
    //动态设置recordHistory配置项
    setRecordHistory(boolean);
    //动态设置scrollingSpeed配置项
    setScrollingSpeed(milliseconds);
    //添加或删除鼠标/滑动控制,第一个参数为启用、禁用;第二个参数为方向,取值包含all、up、dowm、left、right,可以使用多个,逗号分隔
    setAllowScrolling(boolean,[directions]);
    //销毁fullpage特效,不写type,fullpage给页面添加的样式和html元素还在;如果使用all,则样式和html等全部被销毁
    destroy(type);
    //重新更新页面和尺寸,用于通过ajax请求后改变了页面结构之后,重建效果
    reBuild();

     

     

    回调函数:

    //滚动到某一section,且滚动结束后,会触发一次此回调函数,函数接受anchorLink和index两个参数,anchorLink是锚链接名称,index是序号,从1计算
    afterLoad(anchorLink,index);
    //在离开一个section时,会触发一次此回调函数;index是离开的页面的序号,从1计算;nextIndex是滚动到的目标页面的序号,从1开始计算;direction判断往上滚动还是往下滚动,值为up或down。通过return false,可以取消滚动
    onLeave(index,nextIndex,direction);
    //页面结构生成后的回调函数,或者说页面初始化完成后的回调函数
    afterRender();
    //浏览器窗口尺寸改变后的回调函数
    afterResize();
    //滚动到某一slide后的回调函数,与afterLoad类似
    afterSlideLoad(anchorLink,index,slideAnchor,slideIndex);
    //在离开一个slide时,触发此回调函数,与onLeave类似
    afterSlideLoad(anchorLink,index,slideIndex,direction,nextSlideIndex);

     

     

  • Font Awesome:精心打造的 Twitter Boostrap 矢量字体图标

    Font Awesome 是一套专门为 Twitter Boostrap 设计的图标字体库。这套图标字体集几乎囊括了网页中可能用到的所有图标,除了包括 Twitter Boostrap 的默认图标外,还有社交网络图标、Web 应用程序图标和编辑器图标等等,可以免费用于商业项目。

    主要特色:

    ✓ 一种字体,249个图标,是网页操作的象形语言;
    ✓ 纯 CSS 控制,能够轻松定义图标的颜色、大小、阴影以及任何 CSS 能够实现的效果;
    ✓ 无限缩放,矢量图标在任何尺寸下都一模一样;
    ✓ 免费使用,包括商业和非商业项目;
    ✓ 支持 Internet Explorer 7 浏览器;
    ✓ 能够在 Retina 屏幕完美呈现;
    ✓ 完全兼容 Twitter Boostrap 最新版本;
    ✓ 对设计师友好,设计师能够轻松使用;
    ✓ 和其它图标字体不同,兼容屏幕阅读器;