图片预加载之无序预加载

废话不多说,直接上图。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>PreLoading</title>
    <style>
        *{margin:0; padding:0; border:none; outline:0; text-decoration:none;}
        html,body,.box{width:100%; height:100%;}
        .box{display:none;}
        #img{width:90%; height:90%; margin:2vh auto 0; display:block; box-shadow:0 0 10px gray;}
        .box .btns{width:140px; height:40px; display:block; margin:20px auto;}
        .box .btns .btn{width:60px; height:40px; display:block; border:1px gray solid; background-color:#ccc; text-align:center; line-height:40px; float:left;}
        .box .btns .btn:nth-of-type(2){margin-left:16px;}

        .load{width:100%; height:100%; display:block; font-size:60px; font-family:"微软雅黑"; color:#ccc; text-align:center; line-height:100vh; position:fixed;}
    </style>
</head>
<body>
    <div class="box">
        <img id="img" src="" alt="pic">
        <p class="btns"><a href="javascript:" class="btn">prev</a><a href="javascript:" class="btn">next</a></p>
    </div>
    <p class="load">0%</p>

    <script type="text/javascript">

        var imgs = [‘http://down.699pic.com/photo/50036/7661.jpg?_upt=da51378d1494571758&_upd=500367661.jpg‘,
                    ‘http://desk.fd.zol-img.com.cn/t_s1920x1080c5/g5/M00/09/0F/ChMkJljskIqIPX9bAAMPyuIn8DcAAbj8QB7XpYAAw_i343.jpg‘,
                    ‘http://desk.fd.zol-img.com.cn/t_s1920x1080c5/g5/M00/09/0F/ChMkJljskLeIaW-JAAIudN_yqvgAAbj8gDQO5AAAi6M64.jpeg‘,
                    ‘http://desk.fd.zol-img.com.cn/t_s1920x1080c5/g5/M00/0F/08/ChMkJlauzISIH0uXAARUHuJLVX8AAH8-gHu6zsABFQ2166.jpg‘,
                    ‘http://desk.fd.zol-img.com.cn/t_s1920x1080c5/g5/M00/0F/08/ChMkJlauzISIIL5TAAObxg4-XeUAAH8-gHzP3EAA5ve000.jpg‘];

        // 绑定按钮事件

        var btns = document.getElementsByClassName(‘btn‘),
            img = document.getElementById(‘img‘),
            index = 0;

        for(var i=0;i<btns.length;i++){
            btns[i].onclick = function(){
                if(this.innerHTML === ‘next‘){
                    index = Math.min(++index , imgs.length-1);
                    img.setAttribute(‘src‘,imgs[index]);
                }
                if(this.innerHTML === ‘prev‘){
                    index = Math.max(--index , 0);
                    img.setAttribute(‘src‘,imgs[index]);
                }
            }
        }

        // 计数变量

        var count = 0,
            load = document.getElementsByClassName(‘load‘)[0],
            box = document.getElementsByClassName(‘box‘)[0];

        // 无序预加载

        for(var i=0;i<imgs.length;i++){
            (function(i){
                var imgObj = new Image();
            imgObj.onload = function(){
                    load.innerHTML = Math.round((count + 1) / imgs.length * 100) + ‘%‘;
                    count++;
                    if(count >= imgs.length-1){
                        load.style.display = ‘none‘;
                        box.style.display = ‘block‘;
                        img.setAttribute(‘src‘,imgs[0]);
                        document.title = ‘1/‘ + imgs.length;
                    }
                }
            imgObj.onerror = function(){
                    load.innerHTML = Math.round((count + 1) / imgs.length * 100) + ‘%‘;
                    count++;
                    if(count >= imgs.length-1){
                        load.style.display = ‘none‘;
                        box.style.display = ‘block‘;
                        img.setAttribute(‘src‘,imgs[0]);
                        document.title = ‘1/‘ + imgs.length;
                    }
                }
                imgObj.src = imgs[i];
            })(i);
        }
    </script>
</body>
</html>
时间: 2024-11-02 09:33:56

图片预加载之无序预加载的相关文章

图片的预加载之无序加载

当页面中图片很多的情况下,如果不做图片预加载,在图片没加载出来之前去访问,那用户看到的就是一片空白,影响用户体验, 这个时候图片预加载就非常重要了. 在进入主体页面之前先做一个loading出来,显示图片加载进度,加载完毕了再进入实际页面. 代码如下: HTML <div class="box"> <img src="http://pic29.photophoto.cn/20131231/0046043373506387_b.jpg" id=&qu

封装的图片预加载,数据加载到浏览器底部加载数据

html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script src="jquery-1.8.3.min.js" type="text/javascript"></script> <style> *{ padding:0; margin:0

如何通过预加载器提升网页加载速度

预加载器(Pre-loader)可以说是提高浏览器性能最重要的举措.Mozilla 官方发布数据,通过预加载器技术网页的加载性能提升了19%,Chrome测试了 Alexa 排名前2000名网站,性能有20%的提升. 它并不是一门新技术,有人认为只有 Chrome 才具备这个功能.也有人认为它是有史以来提升浏览器性能最有效的方法.如果你第一次接触预加载器,也许心中已经有了无数个问号.什么是预加载器?它是如何提升浏览器性能的? 首先需要了解浏览器是如何加载网页的 一个网页的加载依赖于脚本文件.CS

预加载与智能预加载(iOS)

来源:Draveness(@Draveness) 链接:http://www.jianshu.com/p/1519a5302141 前两次的分享分别介绍了 ASDK 对于渲染的优化以及 ASDK 中使用的另一种布局模型:这两个新机制的引入分别解决了 iOS 在主线程渲染视图以及 Auto Layout 的性能问题,而这一次讨论的主要内容是 ASDK 如何预先请求服务器数据,达到看似无限滚动列表的效果的. 这篇文章是 ASDK 系列中的最后一篇,文章会介绍 iOS 中几种预加载的方案,以及 ASD

tableview加载图片的时候的优化之lazy(懒加载)模式and异步加载模式

iOS---tableview加载图片的时候的优化之lazy(懒加载)模式and异步加载模式举个例子,当我们在用网易新闻App时,看着那么多的新闻,并不是所有的都是我们感兴趣的,有的时候我们只是很快的滑过,想要快速的略过不喜欢的内容,但是只要滑动经过了,图片就开始加载了,这样用户体验就不太好,而且浪费内存.这个时候,我们就可以利用lazy加载技术,当界面滑动或者滑动减速的时候,都不进行图片加载,只有当用户不再滑动并且减速效果停止的时候,才进行加载.刚开始我异步加载图片利用SDWebImage来做

html中的图片、css、js等路径加载问题

网页文件的存取路径有3种:物理路径.绝对路径和相对路径. 物理路径就是你的文件放在主机上的具体位置,例如:D:\\image\\1.jpg 这种格式,该方法可以很快确定出你的文件,但是在网页显示路径基本很少用. 绝对路径是以网站的根目录(www)作为起始点,某文件在该项目中具体位置信息.比如你的网站放在 /var/www 中,那么 /var/www 就是你的根目录.如果文件 head.jpg 放在该目录的 image 里,那么 head.jpg 的路径信息就是 /image/head.jpg.但

Android图片管理组件(双缓存+异步加载)

转自:http://www.oschina.net/code/snippet_219356_18887?p=3#comments ImageManager2这个类具有异步从网络下载图片,从sd读取本地图片,内存缓存,硬盘缓存,图片使用动画渐现等功能,已经将其应用在包含大量图片的应用中一年多,没有出现oom Android程序常常会内存溢出,网上也有很多解决方案,如软引用,手动调用recycle等等.但经过我们实践发现这些方案,都没能起到很好的效果,我们的应用依然会出现很多oom,尤其我们的应用包

使用 vant 的 v-lazy 实现图片 vue 在移动端的懒加载

官方文档:https://youzan.github.io/vant/#/zh-CN/lazyload 引入 Lazyload 是 Vue 指令,使用前需要对指令进行注册 import Vue from 'vue'; import { Lazyload } from 'vant'; // options 为可选参数,无则不传 Vue.use(Lazyload, options); 基本用法 将v-lazy指令的值设置为你需要懒加载的图片 <img v-for="img in imageLi

jQuery Mobile 手动显示ajax加载器,提示加载中...

在使用jQuery Mobile开发时,有时候我们需要在请求ajax期间,显示加载提示框(例如:一个旋转图片+一个提示:加载中...).这个时候,我们可以手动显示jQuery Mobile的加载器,大致流程如下: 1. 启动加载器,显示“加载中...”: 2. 进行ajax请求,请求完成后更新页面数据,刷新jQuery Mobile控件样式: 3. 关闭加载器. 下面就来讲解jQuery Mobile 1.2.0 和 1.1.0 中手动显示加载器的方法(很简单,几行代码就OK了!). 首先是jQ