2016-11-08 12 views
1

と画像の変更ソースは、私は私のアプリケーションは、Ruby on Railsに上に構築されたときにユーザーがスクロールRuby on Railsには、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'); 
} 

ダウン私のWebページ上のイメージの1つを変更するJavaScript関数を持っています。スリムなマークアップは私のローカルホスト上でこの

a href="http://www.thisisarealsite.com" 
    = image_tag("white_logo.png", alt: "logo", id: "logo") 

のように見えるの機能が正常に動作しますが、我々は生産にサイトを起動したときにファイルが欠落しています。レールがすべてを共通のディレクトリに吸い取っていることはわかっていますが、ローカルホストとプロダクションの両方でイメージが動作するようにイメージを修正する方法はわかりません。私は '../assets/'参照を取り除き、ファイルを指してみましたが、localhostまたはproductionのどちらでも動作しませんでした。

答えて

1

Railsの各JS、CSSおよびその他の資産ファイルへの指紋を追加し、アセットパイプラインを使用しています。だから、名前でファイルを取得するだけでは、指紋で名前を使用する必要はありません。 image_tagヘルパーはプロダクションで正しいパスを生成するので、何とかそれらのパスをjavascriptに挿入する必要があります。

は、たとえば、あなたがこのような何かを行うことができます。その後、

$('#logo').attr('src', whiteLogoPath); 
+0

私はこの答えが気に入っていますが、問題はブラウザーが二重引用符で平易なHTMLにレンダリングして、不一致となり、構文エラーがスローされることです。 –

+0

実際には、私はそれを一重引用符で二重引用符を切り替えることによってレンダリングしました。残念ながら、srcはイメージタグに設定されています。私はattr以外の別の方法を使用する必要があります –

+0

ちょっと@NickGilbert私は私の答えを更新しました。 'image_tag'の代わりに' asset_path'ヘルパーを呼び出す必要があります。プレーンなURLが生成されます。 –

0

ことはあなたのpublicフォルダにロゴを移動すると、このようにそれらを参照してください:

$('#logo').attr('src', '/blue_logo.png')

$('#logo').attr('src', '/white_logo.png')

+0

/blue_logo.png

javascript: var blueLogoPath = "#{asset_path('blue_logo.png')}"; var whiteLogoPath = "#{asset_path('white_logo.png')}"; 

そして、発見されないのはlocalhost –

+0

ああ上で、そのことについて申し訳ありません!ロゴをパブリックフォルダに移動する必要があることを忘れてしまった。私は分かりやすくするために私の答えを更新しました。 – rebagliatte