• 图片预加载


    隐藏元素的背景图是不会一开始就加载的,只有显示的时候才会加载,所以为了避免显示的时候加载延时,就可以采用图片预加载,浏览器渲染的时候只要图片加载过一次,就会从缓存中取得,所以在图片真正使用的之前进行一次预加载;

    在开发的过程,我们经常会遇到这样的要求,当鼠标hover上去的时候,更改菜单的背景。如果没有进行图片预加载的话,会出现闪烁。那么拥有1px的眼睛的设计师们不会放过你的。为什么会出现这张情况?因为hover的时候,图片才会去加载。那么我们现在来解决这个问题。

    首先我们要知道一点:如果图片在使用之前就已经请求过了,那么再次使用的时候,就不会再去请求(ps:图片路径一样)。下面讲实现方式

    1.使用纯的css进行图片预加载

    body:after {
        content: "";
        display: block;
        position: absolute;
        background: url("../image/manage/help/help_item2_01.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_02.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_03.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_04.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_05.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_06.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_07.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_01.png?v=201707241359") no-repeat -10000px -1000px;
         0;
        height: 0
    }

    原理是加载了该图片,但是我们不显示在可视范围内。这种方式极其简单。但是也有一个致命的弱点,图片跟随文档一同加载,有时候我们为了提高文档的加载速度,那么这种方式方式就不适合了。

    2.使用纯javascript进行图片预加载

      //存放图片路径的数组
        var imgSrcArr = [
            'imgsrc1',
            'imgsrc2',
            'imgsrc3',
            'imgsrc4'
        ];
    
        var imgWrap = [];
    
        function preloadImg(arr) {
            for(var i =0; i< arr.length ;i++) {
                imgWrap[i] = new Image();
                imgWrap[i].src = arr[i];
            }
        }
    
        preloadImg(imgSrcArr);
    
        //或者延迟的文档加载完毕在加载图片
    
        $(function () {
            preloadImg(imgSrcArr);
        })

    3.使用css+js方式进行图片预加载

    .preload-img:after{
                content:"",
                background: url("../image/manage/help/help_item2_01.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_02.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_03.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_04.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_05.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_06.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_07.png?v=201707241359") no-repeat -10000px -1000px,url("../image/manage/help/help_item2_01.png?v=201707241359") no-repeat -10000px -1000px;
            }
    
    /*
        比如我们写了上面的这样一个类,但是页面中没有用到,我们在文档加载完毕之后,给某个元素添加该类
    */
    
    $(function(){
        $("#target").addClass("preload-img")
    })

    4.使用ajax方式进行图片预加载

        $(function(){
            $.get('图片的路径');
        })
        /*
        当然我们也可以写成一个函数,这里我就不演示了
        */
  • 相关阅读:
    iLearning D3.js 2.0 released
    A better way to learn D3 js
    数据中台解析Hive SQL过程
    go语言刷leetcode
    go语言刷leetcode
    普通方法多态,属性,私有方法和静态方法不多态
    Kafka spring 集成
    Scala Sublime text 3 Build 编译
    tornado settings想到的
    linux 线程回顾
  • 原文地址:https://www.cnblogs.com/gopark/p/9150424.html
Copyright © 2020-2023  润新知