touchweb手机网站图片加载方法(canvas加载和延迟加载)
一、canvas图片加载
关于canvas加载,我的方法是,将文章中所有用到图片的地方,都用canvas代替,给canvas一个data-src,里面存放img的路径,通过canvas方法渲染图片。因为图片渲染需要时间,一般会给canvas一个背景,背景可以用gif图片。图片渲染好了之后把背景去掉。
我的canvas代码如下:
canvasload: function () {
            //canvas加载图片
            var imglength = $("#您的id").find("canvas").length;
            if (imglength > ) {
                $("#您的id").find("canvas").each(function () {
                    var imgSrc = $(this).data("src");
                    var imageObj = new Image();
                    imageObj.canvs = $(this)[];
                    var cvs = imageObj.canvs.getContext('2d');
                    if (cvs) {
                        imageObj.onload = function () {
                            imageObj.canvs.width = this.width;
                            imageObj.canvs.height = this.height;
                            cvs.drawImage(this, , );
                            $(imageObj.canvs).css("background-image", "none");
                        }
                        imageObj.src = imgSrc;
                    }
                })
            }
},
用法很简单,直接在页面中引用这个函数就可以了,注意,所有canvas外层要包裹一个ID
二、图片延迟加载
图片延迟加载方法有很多,下面简单介绍一个,可以引入一个jquery插件。这个插件是一个网友写的,试了一下能用,代码如下:
(function ($) {
    $.fn.lazyloading = function (options) {
        var defaults = {
            preyimg: "/load.gif",
            picpath: "data-original",
            container: $(window),
            loadfirst: false, //进入页面后是否加载当前页面的图片
            defaultHeightID: "lazyloadingHeight"//页面上默认高度的input标签id
            //imgPaddingID: "lazyloadingPadding"//img的padding值
        };
        var params = $.extend({}, defaults, options || {});
        params.cache = [];
        $(this).each(function () {
            var node = this.nodeName.toLowerCase(), url = $(this).attr(params["picpath"]), preyimg = params["preyimg"];
            var defaultheight = $("#" + params["defaultHeightID"]).val(); //, padding = $("#" + params["imgPaddingID"]).val(); //
            //重组
            var data = {
                obj: $(this),
                tag: node,
                url: url,
                preyimg: preyimg,
                defaultheight: defaultheight
            };
            params.cache.push(data);
        });  
        var init = function () {
            $.each(params.cache, function (i, data) {
                var thisImg = data.obj, tag = data.tag, url = data.url, preyimg = data.preyimg;
                if (typeof (url) != "undefined")// 判断是否需要延迟加载
                {
                    var parent1 = thisImg.parent(); //a
                    var Inner = null; //
                    if (parent1.is("a") == true) {//img wrap by a
                        Inner = parent1;
                    }
                    else {
                        Inner = thisImg;
                    }
                    var width = thisImg.attr("width") || thisImg.css("width");
                    var height = data.defaultheight || thisImg.css("height");
                    //if (i == 0) alert(data.defaultheight);
                    var attrheight = thisImg.attr("height");
                    if (attrheight != null) height = attrheight;
                    if (width != null && width.indexOf("px") > -) width.replace("px", "");
                    if (height != null && height.indexOf("px") > -) height.replace("px", "");
                    var divstr = "<div class='.loading' style='text-align: left;position:relative;float:left;width:" + width + "px;";
                    var HasHeight = true; //图片是否指定了高度
                    divstr = divstr + "height:" + height + "px;";
                    if (attrheight == null || attrheight == "") {
                        HasHeight = false;
                    }  
                    thisImg.css("position", "relative");  
                    divstr = divstr + "' ></div>"
                    //修正外层div:text-align的影响
                    Inner.wrap(divstr);
                    //修正img外面不是a标签时parent()已经改变的问题
                    parent1 = thisImg.parent();
                    if (HasHeight == true) { parent1.attr("lazyloading_hasheight", ""); } //是否指定了高度
                    else { { parent1.attr("lazyloading_hasheight", ""); } }
                    parent1.append("<img class='loadhiddenimg' width='0' height='0' style='display:none;' src='' />");
                    thisImg.attr("src", preyimg);
                    thisImg.removeAttr("width").removeAttr("height");
                    thisImg.attr("width1", width).attr("height1", attrheight);  
                    ////thisImg.attr("width", "50px").attr("height", "50px"); //loading图大小
                    //thisImg.css("margin", "0 auto");
                    thisImg.css("margin", ((height / ) - ) + "px auto auto " + ((width / ) - ) + "px");
                    $(".lazyloading").css("display", "table"); //.css("position", "relative");
                }
            });
        }
        //动态显示数据
        var loading1 = function () { };
        var loading = function () {
            //窗口的高度+看不见的顶部的高度=屏幕低部距离最顶部的高度
            var thisButtomTop = parseInt($(window).height()) + parseInt($(window).scrollTop());
            var thisTop = parseInt($(window).scrollTop()); //屏幕顶部距离最顶部的高度  
            $.each(params.cache, function (i, data) {
                var thisImg = data.obj, tag = data.tag, url = data.url, post, posb;  
                if (thisImg) {//对象不为空
                    if (typeof (url) != "undefined") {// 判断是否需要延迟加载
                        var PictureTop = parseInt(thisImg.offset().top);
                        //如果处理可见范围内,并且原图地址data-original不等于src,则加载图片
                        if (PictureTop >= thisTop && PictureTop <= thisButtomTop && thisImg.attr("data-original") != thisImg.attr("src")) {
                            var hiddenImg = thisImg.siblings("img.loadhiddenimg");  
                            hiddenImg.load(function () { //隐藏图片加载完之后的回调函数
                                var width = thisImg.attr("width1");
                                var height = thisImg.attr("height1");
                                thisImg.attr("width", width).attr("height", height).removeAttr("width1").removeAttr("height1");
                                thisImg.css("margin", "0 auto");
                                if (thisImg.parent().attr("lazyloading_hasheight") == "") {//没有指定高度时,加载图片后去掉div高度自适应
                                    if (thisImg.parent().is("a") == true) {
                                        thisImg.parent().parent().css("height", "");
                                    }
                                    else {
                                        thisImg.parent().css("height", "");
                                    }
                                }
                                thisImg.load(function () {
                                    if (thisImg.parent().is("a") == true) {
                                        thisImg.parent().parent().css("height", thisImg.height());
                                    }
                                    else {
                                        thisImg.parent().css("height", thisImg.height());
                                    }
                                });
                                thisImg.css('opacity', '0.2');
                                thisImg.attr("src", hiddenImg.attr("src"));
                                thisImg.animate({ opacity: 1.0 });
                                if (thisImg.attr("alt") != "") {
                                    thisImg.attr("title", thisImg.attr("alt"));
                                    thisImg.attr("alt", "");
                                }
                            }).error(function () {
                                thisImg.error(function () {
                                    thisImg.css("margin", "0 auto auto 0");
                                    if (thisImg.parent().attr("lazyloading_hasheight") == "") {//没有指定高度时,加载图片后去掉div高度自适应
                                        if (thisImg.parent().is("a") == true) {
                                            thisImg.parent().parent().css("height", "");
                                        }
                                        else {
                                            thisImg.parent().css("height", "");
                                        }
                                    }
                                });
                                thisImg.attr("src", hiddenImg.attr("src")); //alert("error");
                                if (thisImg.attr("alt") != "") {
                                    thisImg.attr("title", thisImg.attr("alt"));
                                    thisImg.attr("alt", "");
                                }
                            });
                            hiddenImg.attr("src", url);
                        }
                    }
                }
            });
        };
        //初始化
        init();
        //事件触发
        //加载完毕即执行
        if (params["loadfirst"] == true) loading();
        //滚动执行
        params.container.bind("scroll", loading).bind("resize", loading);
    };
})(jQuery); 
用法很简单:
<a href="#"><img alt="haorooms博客" src="" data-original="http://www.haorooms.com/uploads/images/table.gif" class="lazyloading" /></a>
<script type="text/javascript">
$(function () {
$("img.lazyloading").lazyloading({ loadfirst: true });
}) </script>
touchweb手机网站图片加载方法(canvas加载和延迟加载)的更多相关文章
- js不需要知道图片宽高的懒加载方法(经过实际测试,不加宽高仍然是无法正常加载的,设置height:auto,height:100%,仍然显示高度为0)
		js不需要知道图片宽高的懒加载方法 懒加载是如何实现的? - 简书https://www.jianshu.com/p/e86c61468285找到一个不需要知道图片宽高的懒加载方法了(经过实际测试,不 ... 
- javascript文件加载模式与加载方法
		加载方式 形象图像化方法,见 http://www.growingwiththeweb.com/2014/02/async-vs-defer-attributes.html 1. script标签, ... 
- 手机网站keyup解决方案
		模糊搜索keyup无效,解决方案如下 //手机网站解决keyup的方法 $(function () { $('#repairsearch').bind('focus', filter_time); } ... 
- 带你认识网站图片img懒加载和预加载的区别
		懒加载 什么是懒加载? 懒加载也就是延迟加载.当访问一个页面的时候,先把img元素或是其他元素的背景图片路径替换成一张大小为1*1px图片的路径(这样就只需请求一次,俗称占位图),只有当图片出现在浏览 ... 
- fackbook的Fresco的多种图片加载方法以及解码过程
		上篇文章中我们提到了图片加载其实是用了三条线程,如果没看过的同学可以先了解下这里. fackbook的Fresco的Image Pipeline以及自身的缓存机制 那么今天我们就来探索一下如何在代码中 ... 
- iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
		Apple官方的文档为生成一个UIImage对象提供了两种方法: 1. imageNamed,其参数为图片的名字: 2. imageWithContentsOfFile,其参数也是图片文件的路径. ... 
- 10、 iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile
		Apple官方的文档为生成一个UIImage对象提供了两种方法: 1. imageNamed,其参数为图片的名字: 2. imageWithContentsOfFile,其参数是图片文件的路径. 两种 ... 
- canvas加载图片需要二次刷新的问题
		如题:此问题我也经在百度问问上进行了解答.https://zhidao.baidu.com/question/1048045241465845579.html 好吧,难怪现在百度那么坑人,理论水军专家 ... 
- UIImage加载图片的方式以及Images.xcassets对于加载方法的影响
		UIImage加载图片的方式以及Images.xcassets对于加载方法的影响 图片缓存 根据是否将创建好的对象缓存入系统内存,有两类创建UIImage对象的方法可选: 缓存:+ imageName ... 
随机推荐
- php开发中sql语句拼接示例
			1.插入语句 $sql="insert into Ad(AdClassID,AdType,AdTit,AdFileName,AdUrl,AShow,Addtime) values('&quo ... 
- navicat链接lunix平台上的数据库
			xsell 4.navicat软件 想在链接数据库的得常规设置里设置: 链接名称.主机名(链接lunix平台后才干ping 通的ip地址) port.username.password 然后选择ssh ... 
- Linux学习之十二-Linux文件属性
			Linux文件属性 在Linux中,对于每个文件都有相应属性,以Linux中root用户家目录下新建文件a.txt为例,在a.txt中输入几个字符 使用命令ls -ild a.txt查看文件的权限等 ... 
- 奇怪!post提交 地址栏参数竟然可见
			转: http://blog.csdn.net/yuebinghaoyuan/article/details/7727802 在做项目中,form标签中method="post&quo ... 
- PocketBeagle 初高级设置
			前言 原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正.本文使用markdown标记语言写成,为获得最好的阅读体验,请访问我的博客原文. 1. PocketBeagle Summary  ... 
- project修改时间日历
			视图→甘特图 格式→时间表→右键时间表 详细的日程表,然后双击时间即可 
- Action window  Flags
			Action window 主要字段使用 含义 target 值 作用 current 当前窗口 new 新窗口 inline 内联编辑 fullscreen 全屏 main 当前窗口的主动作 ... 
- TCP/IP详解 卷一(第三章 IP:网际协议)
			IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP及IGMP数据都以IP数据报格式传输. IP提供不可靠.无连接的数据报传送服务. 1.不可靠:就是它不能保证IP数据报能成功地到 ... 
- XML基础知识学习
			概念: XML 指可扩展标记语言 XML 是一种标记语言,非常类似 HTML ,文本文件. XML 的设计宗旨是数据传输,而非显示数据 .存储和传输复杂的关系模型数据 XML 标签没有被提前定义 使用 ... 
- Centos7 安装 Maven 3.5.*
			下载 Apache Maven 访问 Maven官方网站,打开后找到下载链接,如下: 解压 tar zxvf apache-maven-3.5.3-bin.tar.gz 添加环境变量 打开 /etc/ ... 
