【问题标题】:How to call background-image URL in Javascript如何在 Javascript 中调用背景图像 URL
【发布时间】:2020-08-10 00:40:17
【问题描述】:

我在 Squarespace 中有一个部分,我通过自定义 CSS 设置了背景图像:

background-image:url('https://images.squarespace-cdn.com/content/v1/5f187409db749f75b4b70872/1595438345426-RJBC7YPJSV4XRBU4WSDM/ke17ZwdGBToddI8pDm48kLkXF2pIyv_F2eUT9F60jBl7gQa3H78H3Y0txjaiv_0fDoOvxcdMmMKkDsyUqMSsMWxHk725yiiHCCLfrh8O1z4YTzHvnKhyp6Da-NYroOW3ZGjoBKy3azqku80C789l0iyqMbMesKd95J-X4EagrgU9L3Sa3U8cogeb0tjXbfawd0urKshkc5MgdBeJmALQKw/Stocksy_txp024e1acdDSm200_OriginalDelivery_2897817.jpg');
background-repeat:no-repeat;

我正在尝试在所述背景图像上应用this hover distortion effect,并且需要调用/定位它,但我不知道该怎么做,因为我不是开发人员 - 我该怎么做?这是我到目前为止的 Javascript 代码:

var myAnimation = new hoverEffect({
    parent: document.querySelector('[data-section-id="5f1874b38304ad336775b4ec"].section-background'),
    image1: ???,
    image2: ???,
    displacementImage: 'https://homesteadmodern.com/assets/displacement.png'
});

更新

我设法使用parent: document.querySelector('[data-section-id="5f1874b38304ad336775b4ec"].page-section > div') 更具体地定位了 div,并设法在 image1 和 image2 中使用了实际的 URL,它们按预期显示为背景图像。现在唯一的问题是悬停不再起作用,即使当我取出> div 时它确实起作用(但这会导致图像出现在错误的位置)!有什么帮助吗?

【问题讨论】:

    标签: javascript css hover squarespace


    【解决方案1】:

    您可以使用getComputedStyle() function 来做到这一点。

    var parent = document.querySelector('[data-section-id="5f1874b38304ad336775b4ec"].section-background');
    var bgImage = getComputedStyle(parent).getPropertyValue('background-image');
    

    bgImage 的值是这样的:

    url("https://images.squarespace-cdn.com/content/v1/5f187409db749f…ALQKw/Stocksy_txp024e1acdDSm200_OriginalDelivery_2897817.jpg")
    

    这是您在 CSS 中输入的确切值。如果要获取网址,可以添加replace()函数,如this answer to a similar question建议的那样:

    var bgImage = getComputedStyle(parent)
            .getPropertyValue('background-image')
            .slice(4, -1).replace(/"/g, "");
    

    bgImage 现在的值将是:

    https://images.squarespace-cdn.com/content/v1/5f187409db749f…ALQKw/Stocksy_txp024e1acdDSm200_OriginalDelivery_2897817.jpg
    

    【讨论】:

    • 非常感谢。我已经合并了你的代码,所以 image1 和 image2 现在是 bgImage。但似乎还没有动静。我想我们已经很接近了。关于还需要做什么的任何想法?该网站是 lizzykain.com(密码是“test”)。
    【解决方案2】:

    ETA:对于这个关于失真效果的特定教程,您似乎不需要实际调用函数。只需将新的 hoverEffect 分配给一个变量并包含 robin dela 库的悬停效果部分就足以激活效果。

    您可以使用 JavaScript mouseover 和 mouseout 事件。

    即parent 在哪里选择您的元素(并假设您可能希望在悬停时更改背景图像并在不再悬停时更改回来):

    const parent = document.querySelector("your HTML stuff here");
    
    parent.addEventListener("mouseover", function(){
        parent.style.backgroundImage = "url('new-image-url')";
    });
    
    parent.addEventListener("mouseout", function(){
        parent.style.backgroundImage = "url('original-image-url')";
    });

    你也可以这样设置:

    parent.onmouseover = function(){};
    parent.onmouseout = function(){};

    我的理解是,如果您只在元素上执行一个事件,那会很好。

    【讨论】:

    • 感谢您的建议!我确实考虑过鼠标悬停,但是悬停的目的是使用置换图像来创建this glitch effect - 不要从一个背景图像更改为另一个背景图像(对我来说,开始和结束图像应该完全相同)。有什么想法吗?
    • 啊,感谢您的澄清。我对您链接的教程进行了更深入的查看,并且按照它,我发现我根本不需要主动调用该函数。这是我的尝试:rebgrasshopper.github.io/distortioneffect 为什么你需要调用它?放入图像容器有问题吗?哦,没关系,我理解 - 这是因为它作为 CSS 在后台而不是简单地成为一个空 div?有什么理由不能只将链接放入 JS image1 和 image2 点?
    • 另外,只是因为您提到不是开发人员,尽管您似乎在做非常有趣的事情!我相信您已经知道了,但如果您不知道,您可以查看该链接的源代码,以通过浏览器上的开发人员工具或此处来比较您文件中的代码与我的代码:github.com/rebgrasshopper/distortioneffect
    • 非常感谢!是的,问题是因为背景图像目前是由自定义 CSS 确定的——我希望它像一个英雄横幅。我尝试将图像 URL 直接放入 image1 和 image2 点,但没有任何反应 - 图像甚至没有显示 :( 但是,我为不同的 div 类 .page-section 做了测试,图像显示和悬停扭曲效果有效 - 由于某种原因,它只是在网站的一侧,并且没有显示为背景图片!
    • ? 我可能遇到了我对 squarespace 不熟悉的问题。我唯一的进一步想法是,我发现我无法让失真代码接受在线托管的图像,但听起来这不是你现在的问题,而是放置和定位到 squarespace 部分的特定语言。所以……祝你好运!对不起,我帮不上忙!
    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2020-10-09
    • 2018-02-26
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 2019-12-17
    相关资源
    最近更新 更多