博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图片相关
阅读量:6515 次
发布时间:2019-06-24

本文共 2878 字,大约阅读时间需要 9 分钟。

获取图片的原始尺寸

  1. 老旧浏览器
function getNaturalSize(img) {    var image = new Image();    var naturalSize = {};    image.src = img.src;    naturalSize.width = image.width;    naturalSize.height = image.height;    return naturalSize}var img = document.getElementsByTagName('img')[0]getNaturalSize(img); // 返回原始尺寸

分析: 新建一个 image 对象,将当前图片的 src 赋值给 image.src, 此时 image 会发起网络请求从网络下载该图片。此时 image 的宽高就是所求图片的原始尺寸。

  1. html5:

htlm 5 提供了一个直接获取图片原始宽高的 API —— naturalWidth / naturalHeight:

function getNaturalSize(img) {    var naturalSize = {};    naturalSize.width = img.naturalWidth;    naturalSize.height = img.naturalHeight;    return naturalSize;}var img = document.getElementsByTagName('img')[0]getNaturalSize(img); // 返回原始尺寸

兼容 ie 6/7/8 和现代浏览器的写法:

function getNaturalSize(img, callback) {  var naturalSize = {};  if (img.naturalWidth) {      naturalSize.width = img.naturalWidth;      naturalSize.height = img.naturalHeight;      callback(naturalSize);  } else {      var image = new Image();        image.onload = function () {            naturalSize.width = image.width;            naturalSize.height = image.height;            callback(naturalSize);        }        image.src = img.src;    }}var img = document.getElementsByTagName('img')[0]getNaturalSize(img, function (dimensions) {    // 图片处理代码});

判断图片是否加载完成

  1. onload 事件
  2. onreadyStatechange 事件
  3. complate 属性

图片懒加载

一些图片类型的网站上,在图片加载时均采用了一种名为懒加载的方式,具体表现为,当页面被请求时,只加载可视区域的图片,其它部分的图片则不加载,只有这些图片出现在可视区域时才会动态加载这些图片,从而节约了网络带宽和提高了初次加载的速度。避免网页打开时加载过多资源,让用户等待太久。

另外,常常会在图片未加载完成时显示一张 Loading 图片。在一个页面上使用同一张图片时,浏览器会进行缓存,只会发送一次 http 请求,因此,我们书写页面的所有图片的html 如下:

懒加载的原理是:监测用户的滚动动作,当图片进入页面中的时候使用 js 获取 data-src 中的值进行图片图片加载,在图片加载完成时触发的 load 事件中将图片的 data-src 赋值给 src 由于该 url 的图片已经加载完成,这里并不会再发起相同的 http 请求,图片便会显示为正确的图片。

// 注意: 需要引入jQuery和underscore$(function() {    // 获取window的引用:    var $window = $(window);    // 获取包含data-src属性的img,并以jQuery对象存入数组:    var lazyImgs = _.map($('img[data-src]').get(), function (i) {        return $(i);    });    // 定义事件函数:    var onScroll = function() {        // 获取页面滚动的高度:        var wtop = $window.scrollTop();        // 判断是否还有未加载的img:        if (lazyImgs.length > 0) {            // 获取可视区域高度:            var wheight = $window.height();            // 存放待删除的索引:            var loadedIndex = [];            // 循环处理数组的每个img元素:            _.each(lazyImgs, function ($i, index) {                // 判断是否在可视范围内:                if ($i.offset().top - wtop < wheight) {                    // 设置src属性:                    $i.attr('src', $i.attr('data-src'));                    // 添加到待删除数组:                    loadedIndex.unshift(index);                }            });            // 删除已处理的对象:            _.each(loadedIndex, function (index) {                lazyImgs.splice(index, 1);            });        }    };    // 绑定事件:    $window.scroll(onScroll);    // 手动触发一次:    onScroll();

转载于:https://www.cnblogs.com/TravellingKite/p/8654428.html

你可能感兴趣的文章
Oracle 12c 日常维护
查看>>
CF 445A DZY Loves Chessboard
查看>>
Cobbler简介
查看>>
恢复 git reset -hard 的误操作
查看>>
菜鸟初始代码旅程——修改记录
查看>>
C# WinForm 文件上传下载
查看>>
【javascript】ajax请求 编码问题导致的ie浏览器在输入中文文字后没有内容,而chrome正常搜到文字...
查看>>
Git分支操作
查看>>
Spring Integration概述
查看>>
[SAP ABAP开发技术总结]权限对象检查
查看>>
RDIFramework.NET ━ 9.6 模块(菜单)管理 ━ Web部分
查看>>
Android安全问题 静音拍照与被拍
查看>>
cocos2d-x 3.1.1 学习笔记[13] listen 监听器
查看>>
定制私人博客
查看>>
WTL介绍
查看>>
应用程序框架实战三十四:数据传输对象(DTO)介绍及各类型实体比较(转)
查看>>
放量滞涨,抛出信号
查看>>
BeanFactory not initialized or already closed - call 'refresh' before accessing beans解决办法
查看>>
dSYM 文件分析工具
查看>>
R语言合并data.frame
查看>>