美文网首页
对后端返回的一堆字符串实现图片懒加载

对后端返回的一堆字符串实现图片懒加载

作者: 钱学敏 | 来源:发表于2019-01-02 21:15 被阅读0次

需求:对后端返回的一堆字符串实现图片懒加载(react-ssr项目)
方案一:将字符串转为DOM对象在内存中操作,操作完后一次性插入页面
方案二:使用正则替换原始字符串
码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <h2>需求:对后端返回的一堆字符串实现图片懒加载(react-ssr项目)</h2>
    <p>方案一:将字符串转为DOM对象在内存中操作,操作完后一次性插入页面</p>
    <p>方案二:使用正则替换原始字符串</p>
    <div id="app"></div>
</body>

<script>
    //--------方案一 在内存中操作完DOM一次性插入到页面--------

    // 准备插入DOM的容器
    const app = document.querySelector('#app')
    // 创建文档碎片
    let fragment = document.createDocumentFragment();
    // 模拟后端返回的富文本
    let dom=parseDom('<div id="el1">hello world</div>123<img src="http://img5.imgtn.bdimg.com/it/u=3703641458,3650593753&fm=26&gp=0.jpg"/><div id="el2">hello second</div>')
    // 转换为数组
    dom =  Array.from(dom)
    // 遍历所有DOM  需要判断nodeType 元素类型1 文本类型3
    dom.forEach((item)=>{
        // 插入所有节点
        fragment.appendChild(item);

         //  为img元素替换src 同时增加属性 
         if(item.nodeType === 1){
            if(item.nodeName.toUpperCase() === 'IMG'){
                const _src = item.getAttribute('src')
                // 替换 src为占位图 增加标记
                 item.setAttribute('src','__假装有占位的src__')
                item.setAttribute('data-src',_src)
            }   
         }  
    })
    // 一次性插入到容器中
    app.appendChild(fragment)
    
    console.log('方案一替换属性结果:',app.innerHTML)

    // 然后就可以实现懒加载流程了。。。

    //辅助方法 字符串转DOM
     function parseDom(arg) {
       var objE = document.createElement("div");
       objE.innerHTML = arg;

       return objE.childNodes;
    };


    //--------方案二 使用正则替换原始字符串--------

    let  content= '<div id="el1">hello world</div>123<img src="http://img5.imgtn.bdimg.com/it/u=3703641458,3650593753&fm=26&gp=0.jpg" /><div id="el2">hello second</div>'

    let newContent = content.replace(/(?<=\<img [^>]*src=['"])([^'"]+)(?=[^>]*>)/gi, '__假装有占位的src__" data-src="$1');

    // content.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/gi, function (match,i,j) {
    //   console.log(match,i,j);
    //   console.log('arguments',arguments);
    // });
 
    console.log('后端那坨原始字符串:',content)
    console.log('方案二替换属性结果:',newContent)
</script>
</html>

图:


image.png

有了标记之后就可以实现懒加载流程了。。。

一个正则表达式

将“aa.js”替换为“src/aa.js” 只匹配js文件
node v8.9.0以下 不支持后发断言 8.10.0以上支持

content = content.replace(/(?<=['"]{1})([^'"]+)(?=\.js['"]{1})/gi, 'src/$1')

相关文章

  • 对后端返回的一堆字符串实现图片懒加载

    需求:对后端返回的一堆字符串实现图片懒加载(react-ssr项目)方案一:将字符串转为DOM对象在内存中操作,操...

  • 无限滚动的优化方案(二):懒加载实现

    之前对预加载的实现方案做了介绍,这一篇文章主要是我对图片的懒加载的实现的一个总结。主要包括: 视区检测 图片懒加载...

  • 图片懒加载的原理

    懒加载思路及实现 实现懒加载有四个步骤,如下:1.加载loading图片2.判断哪些图片要加载【重点】3.隐形加载...

  • CKEditor5图片上传后台

    后端单张图片处理 deals-java.jpg 图片处理 返回字符串处理

  • 图片懒加载

    前端实现图片懒加载(lazyload)的两种方式 原生JS实现最简单的图片懒加载 30行Javascript代码实...

  • 懒加载和瀑布流

    一、简述图片懒加载的实现原理 图片懒加载 若一开始,页面上有许多的图片要加载,而如果同时加载这么多图片,会消耗性能...

  • 图片的懒加载和预加载

    懒加载:又称延迟加载,需要等到某个情况下才加载,相对可以缓解服务器压力。 实现原理:以懒加载图片为例,当加载图片较...

  • jquery 回到顶部、懒加载、无限加载

    懒加载的实现思路,避免所有图片在网页加载时全部加载而影响网页性能,通过按需加载来实现 【1】图片加载前,目标位置图...

  • 实现图片懒加载

    项目中遇到一个公示信息列表,其中有图片预览, 因为窗口小、列表长、图片多,加载很慢,于是想把图片做成懒加载模式。 ...

  • 图片懒加载实现

    先将img标签的src链接设为同一张图片(比如空白图片),然后给img标签设置自定义属性(比如 data-src)...

网友评论

      本文标题:对后端返回的一堆字符串实现图片懒加载

      本文链接:https://www.haomeiwen.com/subject/ajvtrqtx.html