广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >ajax如何异步加载图片
  • 364
分享到

ajax如何异步加载图片

2024-04-02 19:04:59 364人浏览 安东尼
摘要

这篇文章主要为大家展示了“ajax如何异步加载图片”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ajax如何异步加载图片”这篇文章吧。具体如下:图片一般比较大,

这篇文章主要为大家展示了“ajax如何异步加载图片”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ajax如何异步加载图片”这篇文章吧。

具体如下:

图片一般比较大,所以他们都是在基本网页加载后才逐渐加载上的,整个加载的过程非常不雅观,或者是从模糊逐渐变清晰,或者是从上往下拓展开(当然你也可以认为这些都是不错的特效)。如果是通过定时更换img的src属性来实现图片的动态更换,由此带来的闪烁更让它难以接受,这可不是用alt属性就能让人愉快的。

联系时下比较热门的,号称“无”刷新的AJAX技术,利用XMLHttpRequest对象发起异步请求,待图像加载完毕再动态插入到“前台”的html页面上。应该可以满足需求,不过XMLHttpRequest对象返回的对象只有两个属性responseXML和responseText,前者是XML对象,后者是返回的纯文本内容,似乎没有图片所需要的二进制数据...退一步,即使能用responseText取回图片的二进制数据,我们又如何能够将它插入到前台页面呢?将img的src属性换成请求的url?

说干就干,写个图像幻灯片的代码来验证自己的想法:

<html>
    <head>
        <title>Image Slide</title>
        <script>
function makeAsyncRequest(url, callback)
{
    var httpRequest;
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        httpRequest = new XMLHttpRequest();
        if (httpRequest.overrideMimeType) {
            httpRequest.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) { // IE
        try {
            httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
            }
        }
    }
    httpRequest.onreadystatechange = function () {
        if (httpRequest.readyState == 4
                && httpRequest.status == 200)
            callback(url);
    };
    httpRequest.open('GET', url, true);
    httpRequest.send('');
}
var i = 0;
var max_i = 10;
function displayImage()
{
    var url = "./" + i + ".jpg";
    makeAsyncRequest(url, function (url) {
        var div = document.getElementById("image");
        var img = div.getElementsByTagName("img");
        if (img.length == 0) {
            img = document.createElement("img");
            while (div.childnodes.length > 0)
                div.removeChild(div.childNodes[0]);
            div.appendChild(img);
        } else
            img = img.item(0);
        img.src = url;
        if (i == max_i)
            i = 0;
        else
            i ++;
        window.setTimeout("displayImage();", 1000);
    });
}
        </script>
    </head>
    <body onload="displayImage();">
        <div id="image">
        </div>
    </body>
</html>

以上代码以1000毫秒为时间间隔循环显示图片0.jpg - 10.jpg,效果比较明显,确实消除了闪烁。那么它的原理呢?每张图片的显示都分为两个步骤:
用XMLHttpRequest对象从服务器获取图像,缓存图像到本地的浏览器缓冲区。
从本地的浏览器缓冲区取得图像进行显示。
因为在第二步从取图片到显示的时间很短,所以用户基本上觉察不出任何闪烁。可见,以上技术基于所请求的图像是可缓存的的假设,如果图像是不可缓存的,是不是以上代码就不能正常工作了呢?

还是让代码来说话,把以上代码做些更改:

function displayImage()
{
 var url = "./" + i + ".jpg";
 var url = "./image.PHP?filename=" + i + ".jpg";
    makeAsyncRequest(url, function (url) {
        var div = document.getElementById("image");
        var img = div.getElementsByTagName("img");

再写一个php脚本用来传送所请求的图片:

<?php
    header("Content-Type: image/jpeg");
    header("Cache-Control: no-cache");
    echo file_get_contents($_GET["filename"]);
?>

果真不出所料,又出现了闪烁...

看来还需要另想办法,闭门造车是行不通了,求助Google这位百事通先生吧!功夫不负有心人,终于还是被我找到了,欣喜归欣喜,结果还是让我大跌眼镜,img竟然有onload的事件回调接口,只能庆幸自己的眼镜是树脂的了,"眼镜掉了我不怕不怕啦,不怕不怕不怕啦..."

还等啥,当然是代码伺候了:

<html>
    <head>
        <title>Image Slide</title>
        <script>
var i = 0;
var max_i = 10;
function displayImage()
{
    var img = document.createElement("img");
    img.onload = function () {
        var div = document.getElementById("image");
        while (div.childNodes.length > 0)
            div.removeChild(div.childNodes[0]);
        div.appendChild(img);
        if (i == max_i)
            i = 0;
        else
            i ++;
        window.setTimeout("displayImage();", 1000);
    }
    img.src = "./" + i + ".jpg";
}
        </script>
    </head>
    <body onload="displayImage();">
        <div id="image">
        </div>
    </body>
</html>

"She is an ungly girl!"没啥好说的,不可缓存的图像的情况:

i ++;
        window.setTimeout("displayImage();", 1000);
    }
 img.src = "./" + i + ".jpg";
 img.src = "./image.php?filename=" + i + ".jpg";
 }
    </script>
</head>

以上是“ajax如何异步加载图片”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网node.js频道!

--结束END--

本文标题: ajax如何异步加载图片

本文链接: https://www.lsjlt.com/news/79885.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • ajax如何异步加载图片
    这篇文章主要为大家展示了“ajax如何异步加载图片”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ajax如何异步加载图片”这篇文章吧。具体如下:图片一般比较大,...
    99+
    2022-10-19
  • Android实现异步加载图片
    麦洛开通博客以来,有一段时间没有更新博文了.主要是麦洛这段时间因项目开发实在太忙了.今天周六还在公司加班,苦逼程序猿都是这样生活的.今天在做项目的时候,有一个实现异步加载图片的功能,虽然比较简单但还是记录一下吧.因为麦洛之前实现异步加载图片...
    99+
    2023-05-31
    android 异步加载 roi
  • Ajax如何实现异步加载
    小编给大家分享一下Ajax如何实现异步加载,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!AJAX (Asynchronous J...
    99+
    2022-10-19
  • Android 异步加载图片分析总结
    研究了android从网络上异步加载图像,现总结如下: (1)由于android UI更新支持单一线程原则,所以从网络上取数据并更新到界面上,为了不阻塞主线程首先可能会想到以下...
    99+
    2022-06-06
    异步加载 图片 异步 Android
  • Android ListView异步加载图片方法详解
    本文实例讲述了Android ListView异步加载图片方法。分享给大家供大家参考,具体如下: 先说说这篇文章的优点把,开启线程异步加载图片,然后刷新UI显示图片,而且通过弱...
    99+
    2022-06-06
    方法 图片 listview Android
  • Android实现图片缓存与异步加载
    ImageManager2这个类具有异步从网络下载图片,从sd读取本地图片,内存缓存,硬盘缓存,图片使用动画渐现等功能,已经将其应用在包含大量图片的应用中一年多,没有出现oom...
    99+
    2022-06-06
    异步加载 图片 异步 缓存 Android
  • Android 异步加载图片的实例代码
    异步加载图片的主要流程是进行判断缓存中是否存在图片,如果存在则直接返回,如果不存在则进行下载并进行缓存。 以下是建立一个异步下载类: 代码如下:public class Asn...
    99+
    2022-06-06
    异步加载 图片 异步 Android
  • Ajax实现异步加载数据
    本文实例为大家分享了Ajax实现异步加载数据的具体代码,供大家参考,具体内容如下 项目结构如下 (需要导入一个JQuery的包,配置文件web.xml和springmvc-servl...
    99+
    2022-11-12
  • Android实现ListView异步加载图片的方法
    本文实例讲述了Android实现ListView异步加载图片的方法。分享给大家供大家参考。具体如下: ListView异步加载图片是非常实用的方法,凡是是要通过网络获取图片资源...
    99+
    2022-06-06
    方法 图片 listview Android
  • Android实现图片异步加载及本地缓存
    在android项目中访问网络图片是非常普遍性的事情,如果我们每次请求都要访问网络来获取图片,会非常耗费流量,而且图片占用内存空间也比较大,图片过多且不释放的话很容易造成内存溢...
    99+
    2022-06-06
    异步加载 图片 异步 缓存 Android
  • Android编程学习之异步加载图片的方法
    本文实例讲述了Android编程学习之异步加载图片的方法。分享给大家供大家参考,具体如下: 最近在android开发中碰到比较棘手的问题,就是加载图片内存溢出。我开发的是一个新...
    99+
    2022-06-06
    异步加载 方法 学习 图片 异步 Android
  • Android实现图片异步加载并缓存到本地
    在android应用开发的时候,加载网络图片是一个非常重要的部分,很多图片不可能放在本地,所以就必须要从服务器或者网络读取图片。 软引用是一个现在非常流行的方法,用户体验比较好...
    99+
    2022-06-06
    异步加载 图片 异步 缓存 Android
  • Android App中实现图片异步加载的实例分享
    一、概述 一般大量图片的加载,比如GridView实现手机的相册功能,一般会用到LruCache,线程池,任务队列等;那么异步消息处理可以用哪呢? 1、用于UI线程当Bitma...
    99+
    2022-06-06
    图片 异步 app 异步加载 Android
  • Android中使用二级缓存、异步加载批量加载图片完整案例
    一、问题描述 Android应用中经常涉及从网络中加载大量图片,为提升加载速度和效率,减少网络流量都会采用二级缓存和异步加载机制,所谓二级缓存就是通过先从内存中获取、再从文件中...
    99+
    2022-06-06
    异步加载 图片 异步 二级缓存 缓存 Android
  • jQuery如何预加载图片
    这篇文章给大家分享的是有关jQuery如何预加载图片的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。预加载图片This piece of code&n...
    99+
    2022-10-19
  • Android异步加载数据和图片的保存思路详解
    把从网络获取的图片数据保存在SD卡上, 先把权限都加上 网络权限 android.permission.INTERNET SD卡读写权限 android.permiss...
    99+
    2022-06-06
    数据 图片 Android
  • android异步加载图片并缓存到本地实现方法
    在android项目中访问网络图片是非常普遍性的事情,如果我们每次请求都要访问网络来获取图片,会非常耗费流量,而且图片占用内存空间也比较大,图片过多且不释放的话很容易造成内存溢...
    99+
    2022-06-06
    方法 图片 缓存 Android
  • HTML如何加载本地图片
    这篇文章将为大家详细讲解有关HTML如何加载本地图片,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。<!DOCTYPE html><html><...
    99+
    2022-10-19
  • Springboot如何加载静态图片
    目录如何加载静态图片java工具类使用的是注入的方式Springboot的图片显示问题原因解决方法如何加载静态图片 java工具类 import org.springframewor...
    99+
    2022-11-13
  • Thinkphp怎么结合ajaxFileUpload实现ajax异步图片传输
    这篇文章主要介绍“Thinkphp怎么结合ajaxFileUpload实现ajax异步图片传输”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Thinkphp怎么结合ajaxFileUpload实现a...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作