【问题标题】:fallback for button text color if background-image is not loaded?如果未加载背景图像,按钮文本颜色的后备?
【发布时间】:2016-12-16 07:45:08
【问题描述】:

我有一个带有透明背景的深色背景图像 png 文件的按钮。按钮文本是白色的。如果背景图像没有显示,我需要一个后备来将按钮文本颜色更改为黑色。这怎么能用javascript来完成? 我找到了CSS transparent background fallback when images are disabled,但这似乎在这里不起作用,我也不确定如何在 html 代码中正确输入 div。

.btn-was {  
  background-size: 100%;
  background-repeat: no-repeat;
  color:#fff;
  margin-bottom:25px;
  padding:10px;
}

.btn-was {
  background-image: url(../img/button.png);
}
<a class="btn-was" href="#" role="button">About</a>

【问题讨论】:

    标签: javascript button background-image fallback


    【解决方案1】:

    css 中的 url() 引用不会引发成功/错误事件,因此测试图像是否加载的唯一方法是实际尝试使用 js 加载它

    $(".btn-was").each(function() {
        //extract css `background-image` value of this anchor's css
        var bgimg = $(this).css("background-image").match(/url\(["']?([^()]*)["']?\)/).pop();  
        var image = new Image();                   // dummy img for testing
        $(image).error(function() {                // if img didn't load
            console.log(bgimg + " didn't load ");
        $(".btn-was").css('color','black');          // so assign fallback style
        });
        $(image).attr("src", bgimg);               // check if img loads        
    });  
    

    【讨论】:

    • 谢谢!我将您的脚本加载为外部 .js,但出现错误:“TypeError: $(...).css(...).match(...) is null”
    • 假设你没有忘记添加 jquery 尝试在第二行直接分配 url var bgimg = "http://www.exampl....../img/button.png"
    • 谢谢 - 添加 url 使脚本停止抛出错误。但是没有加载图片时css不会改变。
    • 尝试将$(this).css('color','black');更改为$(".btn-was").css('color','black');
    • 啊,好像我忘了看到 this 内部图像错误函数是指 image 本身而不是 .btn-was :p
    猜你喜欢
    • 2017-08-31
    • 2020-11-11
    • 2016-10-21
    • 2012-05-15
    • 2020-11-07
    • 2016-04-13
    • 2021-05-02
    • 2013-08-13
    • 1970-01-01
    相关资源
    最近更新 更多