画像を Retina Display に対応する
CMSで表示させる画像には拡大画像の large- というファイルがあります。もともとは拡大表示用に利用している画像ですが、これをメイン画像として利用する事ができるようにする JavaScript を用意してみました。
大きな画像を利用する事になるので、サイトが重くなりますので、Cookie を利用して希望する人だけがキレイな画像のファイル名にJavaScriptで置き換えます。全ての画像を対象とするわけではなく、class="retinaImage" のついた画像のみを対象とします。
残念ながら2つを見比べてみても分からないですね。以下をご覧になってみて下さい。
retinaImage.js
$(function(){
if ( $.cookie('js-switch_retina[0]') == 'on' ) {
_.each($('.retinaImage'), function(v){
var imageUrl = v.src;
var fileName = imageUrl.match(".+/(.+?)([\?#;].*)?$")[1];
var largeUrl = imageUrl.replace(fileName, 'large-'+fileName);
var img = new Image();
img.src = largeUrl;
img.onload = function() {
v.src = largeUrl;
}
});
$('#retinaConfigOn').hide();
} else {
$('#retinaConfigOff').hide();
}
});切り替え用のフォーム
<form action="" method="post" class="acms-form" id="retinaConfigOn"> <input type="hidden" name="js-switch_retina" value="on" /> <input type="hidden" name="cookie[]" value="js-switch_retina" /> <input type="submit" name="ACMS_POST_Cookie" value="(現在 通常画像モード)高解像度の画像を使用する" class="acms-btn acms-btn-admin-primary"/> </form> <form action="" method="post" class="acms-form" id="retinaConfigOff"> <input type="hidden" name="js-switch_retina" value="off" /> <input type="hidden" name="cookie[]" value="js-switch_retina" /> <input type="submit" name="ACMS_POST_Cookie" value="(現在 Retinaモード)高解像度の画像を使用しない" class="acms-btn acms-btn-admin-danger"/> </form>
/themes/system/include/unit.html
unit#image ブロックの img タグに class="retinaImage" を追加します。
<!-- BEGIN unit#image -->
<!-- 画像 -->
<div class="column-image-{align}"{display_size}[raw]><!-- BEGIN link#front -->
<a href="{url}"{viewer}[raw]><!-- END link#front -->
<img class="columnImage retinaImage" src="%{ROOT_DIR}{path}" alt="{alt}" width="{x}" height="{y}" /><!-- BEGIN link#rear -->
</a><!-- END link#rear --><!-- BEGIN caption:veil -->
<p class="caption">{caption}</p><!-- END caption:veil -->
</div><!-- END unit#image -->