img标签中src和 data-src

<img  src="<?=base_url()?>images/loading.gif" data-src="<?=$Membership['Img']?>" class="fl" /></a>
<script>
    //当初始化的HTML文档被完全加载和解析完成之后,该事件被触发,而无需等待样式表、图像和子框架的完全加载;
    document.addEventListener('DOMContentLoaded',function() {
        //获取所有需要延迟加载的图片
        let lazyImages = [].slice.call(document.querySelectorAll("img.fl,img.lazyimg,img.min_img"));
        //限制函数被频繁调用
        let active = false;
        const lazyLoad = function() {
            if(active === false){
                active = true;
                setTimeout(function(){
                    lazyImages.forEach(function(lazyImage) {
                        //判断图片是否出现在视窗中
                        //getBoundingClientRect:用于获取某个元素相对于视窗的位置集合
                        if((lazyImage.getBoundingClientRect().top <= window.innerHeight
                            && lazyImage.getBoundingClientRect().bottom >= 0)
                            /***
                             * element.style 既支持读(样式)也支持写,
                             * getComputedStyle 仅支持读并不支持写入。
                             */
                            &&  getComputedStyle(lazyImage).display !== "none"){
                            //将真实的图片url赋值给src属性,发起请求加载资源
                            lazyImage.src = lazyImage.dataset.src;//用元素节点对象的dataset属性,它指向一个对象,可以用来操作HTML元素标签的data-*属性。
                            //图片加载完成后,需取消监控以防止重复加载
                            lazyImage.classList.remove("lazy");//classList:返回一个元素的类属性
                            lazyImages = lazyImages.filter(image => {
                                return image !==lazyImage;
                            });
                            //所有延迟加载图片加载完成后,移除事件触发处理函数
                            if(lazyImages.length === 0){
                                document.addEventListener("scroll",lazyLoad);
                                window.addEventListener("resize",lazyLoad);
                                window.addEventListener("orientationchange",lazyLoad);
                            }
                        }
                    });
                    active = false;
                },200)
            }
        }
        lazyLoad();//初始化加载
        //滚动页面时触发
        document.addEventListener("scroll",lazyLoad);
        //发生窗口大小改变时触发
        window.addEventListener("resize",lazyLoad);
        //在设备的纵横方向改变时触发。
        window.addEventListener("orientationchange",lazyLoad);
    });
</script>
<think>嗯,用户问的是在HTMLimg标签中,srcdata-src这两个属性的值是否可以不同。我需要先确认这两个属性的作用区别。srcimg标签必须的属性,用来指定图片的路径,浏览器加载页面时会直接请求这个资源。而data-src是自定义的数据属性,通常用来存储一些信息,不会直接影响页面显示,需要通过JavaScript来访问。 接下来,用户可能想知道这两个属性是否可以设置不同的值。根据HTML规范,自定义的data-*属性是允许的,所以data-src的值当然可以src不同。常见的应用场景比如延迟加载(懒加载),这时候src可能先放一个占位图,而data-src存放真实图片的URL,等需要的时候再用JS替换src的值。 不过用户可能真正关心的是这样做的实际用途正确方法。需要举例说明,比如懒加载的实现方式,或者预加载资源的情况。还要注意提到,虽然技术上允许,但确保在正确的场景下使用,避免不必要的错误,比如浏览器过早加载不需要的图片,或者JS没有正确处理data-src导致图片不显示。 另外,可能需要提醒用户,使用data-src时,src不能完全为空,否则可能导致404错误,所以常见的做法是给src一个占位图或者透明的小图片,再通过JS替换为data-src中的真实地址。这样既节省流量,又提升页面加载性能。 最后总结一下,srcdata-src的值不同是允许且常见的做法,特别是在优化加载性能时。但需要配合JavaScript来正确切换属性,确保功能正常。</think>在 HTML 的 `<img>` 标签中,`src` `data-src` 这两个属性的值**完全可以不同**,且它们的用途触发加载的时机也不同。以下是具体说明: --- ### **1. `src` 属性** - **作用**:`src`(source)是 `<img>` 标签的**核心属性**,用于指定图片的直接资源路径。 - **加载机制**:当浏览器解析到 `src` 时,会**立即发起请求**加载该资源。 - **特点**:如果 `src` 的值是有效的 URL,图片会直接显示;如果为空或无效,则显示默认的“图片损坏”图标。 --- ### **2. `data-src` 属性** - **作用**:`data-*` 是 HTML5 中的**自定义数据属性**,`data-src` 本身没有特殊含义,但开发者可以通过 JavaScript 利用它存储额外信息(如真实的图片 URL)。 - **加载机制**:浏览器**不会自动加载** `data-src` 的内容,需通过 JavaScript 手动触发。 - **典型场景**:常用于**延迟加载(懒加载)**。例如: ```html <!-- 初始时 src 用占位图,data-src 存真实地址 --> <img src="placeholder.jpg" data-src="real-image.jpg"> ``` --- ### **3. 两者值不同的实际应用** #### **示例:图片懒加载** ```html <img src="loading.gif" data-src="large-image.jpg" class="lazyload"> ``` - **逻辑**: 1. 初始时 `src` 设为轻量占位图(如 loading 动画)。 2. 当用户滚动到图片附近时,通过 JavaScript 将 `data-src` 的值赋给 `src`,触发真实图片加载: ```javascript const images = document.querySelectorAll('.lazyload'); images.forEach(img => { img.src = img.dataset.src; // 将 data-src 的值赋给 src }); ``` --- ### **4. 注意事项** - **避免 `src` 留空**:如果 `src` 值为空(`src=""`),浏览器可能立即发起无效请求,建议用占位图替代。 - **兼容性**:`data-*` 属性在所有现代浏览器中均支持,但需确保 JavaScript 逻辑正确触发。 --- ### **总结** - `src` `data-src` 的值可以不同,且这是常见的优化手段(如懒加载)。 - `src` 直接影响资源加载,`data-src` 需配合 JavaScript 使用,适合动态控制资源加载时机。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值