美文网首页
vue实现img图片地址加载错误,error的处理方法

vue实现img图片地址加载错误,error的处理方法

作者: 八月方便面 | 来源:发表于2024-10-17 10:07 被阅读0次

前提:当我们加载图片地址时,可能会出现错误;这时就会触发onerror事件,可以使用一张提示错误的图片代替显示不了的图片,提升用户交互体验。

一、常规的处理方法

<img src="images/logo.png" onerror="javascript:this.src='images/logoError.png';">

当图片不存在时,将触发 onerror,而onerror 中又为img 指定一个logoError.png 图片。当logo.png图片存在则显示logo.png,不存在将显示 logoError.png。

但是,要注意的是,如果logoError.png 也不存在,则会持续触发 onerror导致死循环页面卡死。

当然,解决办法是有的:

<img src="images/logo.png" onerror="notfoundimg;"/>

<script type="text/javascript">

    function notfoundimg() {

        let img = event.srcElement;

        img.src = "images/logoError.png";

        img.onerror = null; //解绑onerror事件

    }

</script>

二、通过vue绑定onerror实现

<img :src="images/logo.png" :onerror="defaultImg">

<script>

    export default {

        name: "imgError",

        data() {

            return {

                defaultImg: 'this.src="' + require('images/logoError.png') + '"' //默认图地址

            }

        }

    }

</script>

同样的,这里也会遇到跟第一种方法类似的问题,当默认图也不存在时,图片加载死循环。

三、通过vue自定义指令

为了解决图片加载死循环的问题,我们使用vue自定义组件。

首先在入口文件定义一个全局指令

//全局注册自定义指令,用于判断当前图片是否能够加载成功,可以加载成功则赋值为img的src属性,否则使用默认图片

Vue.directive('real-img', async function (el, binding) {//指令名称为:real-img

    let imgURL = binding.value;//获取图片地址

    if (imgURL) {

        let exist = await imageIsExist(imgURL);

        if (exist) {

            el.setAttribute('src', imgURL);

        }

    }

})

/**

* 检测图片是否存在

* @param url

*/

let imageIsExist = function(url) {

    return new Promise((resolve) => {

        var img = new Image();

        img.onload = function () {

            if (this.complete == true){

                resolve(true);

                img = null;

            }

        }

        img.onerror = function () {

            resolve(false);

            img = null;

        }

        img.src = url;

    })

}

因为是全局注册的指令,所以每个页面都可以直接使用。

<!--v-real-img 就是我们定义的指令,绑定的为真实要显示的图片地址。src为默认图片地址-->

<img src="images/logoError.png" v-real-img="images/logo.png">

相关文章

  • vue-lazyload图片错误替换

    vue图片懒加载,vue-lazyload官方错误图片处理:1、用图片来替换加载过程或者加载失败: 2、引入时设置...

  • Vue-img-preload

    vue-img-preload 预加载页面上的图片资源,提高用户体验 使用方法 浏览器中 下载vue-img-pr...

  • 懒加载

    图片懒加载 实现原理 原理:先将img标签中的src链接设为同一张图片(空白图片),将其真正的图片地址存储再img...

  • 笔记 - 图片的加载 & 懒加载

    实现图片的加载 图片的懒加载 实现方案:在img标签内自定义一个属性data-src,用于暂存图片地址获取屏幕可视...

  • 图片加载失败时,加载默认图片

    方法一: //图片加载失败时,加载默认图片$(document).ready(function(){$("img"...

  • 小程序图片加载错误时替换显示默认图片

    使用binderror方法绑定错误事件处理事件 使用errorFunction方法对图片进行替换 / 图片加载失败...

  • 懒加载和瀑布流布局

    简述图片懒加载的实现原理 原理:先将img标签中的src链接设为同一张图片(空白图片),将其真正的图片地址存储再i...

  • 懒加载和瀑布流布局

    简述图片懒加载的实现原理 原理:先将img标签中的src链接设为同一张图片(空白图片),将其真正的图片地址存储再i...

  • 2021-07-13 项目经验

    1.问题:服务端返回图片404,Vue图片加载失败处理方法; 解决方案: 2.问题:vue +vantUI项目中,...

  • 图片懒加载组件与应用

    实现图片只加载首屏用到的,其他的等滚动到再加载这就是图片懒加载 使用vue-lazyload插件实现 安装vue-...

网友评论

      本文标题:vue实现img图片地址加载错误,error的处理方法

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