Ruby on Rails,使用JavaScript更改图像源
我有一个JavaScript函数,当用户向下滚动时,它会更改我的网页上的一个图像
$(window).scroll(function() { if ($(document).scrollTop() > 0) { switchToStatic(); } else { switchToAnimated(); } } function switchToAnimated() { if ($(window).width() > 768) { $('body').css('padding-top', '0'); $('#logo').attr('src', '../assets/blue_logo.png') $('#logo').css('width', '15vw'); $('.navbar').css("background-color", 'transparent'); } } function switchToStatic() { $('body').css('padding-top', '50px'); $('#logo').attr('src', '../assets/white_logo.png') $('#logo').css('width', '7.5vw'); $('.navbar').css("background-color", '#3B98F2'); }
我的应用程序基于Ruby on Rails构建。 纤薄的标记看起来像这样
a href="http://www.thisisarealsite.com" = image_tag("white_logo.png", alt: "logo", id: "logo")
在我的localhost上,这些function正常工作,但是当我们将网站启动到生产时,文件丢失了。 我知道rails将所有内容都放到了一个公共目录中,但我不知道如何解决这个问题,以使图像在localhost和production上都能按照我想要的方式运行。 我试图删除’../assets/’引用,只是指向该文件,但这不适用于localhost或生产。
Rails使用资产管道,为每个js,css和其他资产文件添加指纹。 因此,您不能只按名称获取文件,您需要使用带指纹的名称。 image_tag
helper将在生产中生成正确的路径,因此您需要做的是以某种方式将这些路径注入到javascript中。
例如,您可以执行以下操作:
javascript: var blueLogoPath = "#{asset_path('blue_logo.png')}"; var whiteLogoPath = "#{asset_path('white_logo.png')}";
然后
$('#logo').attr('src', whiteLogoPath);
尝试将徽标移动到公用文件夹并引用它们,如下所示:
$('#logo').attr('src', '/blue_logo.png')
$('#logo').attr('src', '/white_logo.png')