Spotifyの埋め込みiframeが遅かったので、jQueryにて遅延読み込み。
前提
jQueryを読み込んでおく。
html
<div id="spotify-box"></div>
javascript
$(window).on('load', function(){ $('#spotify-box').html('<iframe src="https://open.spotify.com/embed/user/spotify/playlist/xxxxxxxxxx" width="300" height="380" frameborder="0" allowtransparency="true" allow="encrypted-media"></iframe>'); });
注釈
・spotify-boxという空divをhtmlに用意し、サイトが読み込まれた後(onload)、そこにiframeを表示させる。
・html()内のiframeでダブルクオーテーションを使用しているので、iframeはシングルクオーテーションで囲んでいる。
WordPressがXSS,SOME(Same Origin Method Execution)脆弱性に対するアップデートを4.5.2で行った事を受けて、管理サイトを全てアップデートしていったのだが、この4.5.2に同梱されているjQueryが1.12になった事でエラーチェックが厳密になり、今まで動作してくれていたページ内遷移やYoutubeAPIなどが動作しなくなって困った。
(function($){ $(function() { $('a[href^="#"]:not([href$="#"])').click(function() { var href = $(this).attr('href'); var pos = $(href).offset().top; var duration = 200; $('body, html').animate({ scrollTop: pos }, duration, 'swing'); return false; }); }); })(jQuery);
jQuery1.2以降で動作するスムーズスクロール。
出典はXakuro Systemさま。
ありがとうございます。
エラーの詳細はリンク先を。
さて、ここからが本題。
上記スクリプトではページ内遷移出来ないケースがいくつかあった。
まぁ自分が悪いのだが、一応備忘録。
■ページ内遷移でドメインを入れている
例) http://mysite.com の中で、ページ内リンクを http://mysite.com#page-link などドメインを付けてリンクしていた場合、1.12では動かない。
■リンクhtmlに半角スペースを入れてしまっていた
例)
<a href=" page-link ">
phpの記述が不味く、リンクタグの属性内に半角スペースが入ってしまっていた場合、1.12では動かない。
javascriptと正規表現はホント苦手…。
自分用メモ。
bxSliderを導入する時は各画像にwidth,heightを指定しないと、Google Chromeで表示順がずれる不具合が起きる。
忘れるな!
参考サイト
カルーセルを画面横一杯にするカスタマイズ方法がいろんなサイトで紹介されていて嬉しい限り。
良く使うからね。
http://coolwebwindow.com/jquery-lab/archives/514
ただ、この機能を実装した時、Google Chromeでは何故かスライダーの最後の画像→最初の画像に戻る時に一瞬チラつく。
これが非常に気になったので設定を色々見直していたところ、
useCSS:false
を設定する事で回避できた。
原因は
http://nxpg.net/blog/?p=4372
こちらの「解決法および原因考察」にありそう。
(falseにしたらGPUでなくjsで動かすことになるからパフォーマンスは落ちるみたいね)
とても便利なスライダープラグインWP-Cycleですが、IE8以下ではpng画像が透過しません。(ver.0.1.13現在)
■解決策■
こちらで、
「wp-cycle.phpの438から446行を書き換えればいいのさHAHA」
と書かれてます。
具体的には以下。
jQuery(document).ready(function($) { $("#<?php echo $wp_cycle_settings['div']; ?>").cycle({ fx: '<?php echo $wp_cycle_settings['effect']; ?>', timeout: <?php echo ($wp_cycle_settings['delay'] * 1000); ?>, speed: <?php echo ($wp_cycle_settings['duration'] * 1000); ?>, pause: 1, fit: 1 }); });
を、
jQuery(document).ready(function($) { $("#<?php echo $wp_cycle_settings['div']; ?>").cycle({ fx: '<?php echo $wp_cycle_settings['effect']; ?>', timeout: <?php echo ($wp_cycle_settings['delay'] * 1000); ?>, speed: <?php echo ($wp_cycle_settings['duration'] * 1000); ?>, cleartypeNoBg: true }); });
に書き換え。具体的には最後の2項目「pause: 1,fit: 1」を「cleartypeNoBg: true」に置き換えたらOK。
※最終Updateが去年の8月だけど、もしアップデートしたらこの部分を再度修正しないといけない。
これで背景は透過したかに見えたんだけど、今度はフェードの時に透過画像の縁にへんな黒いノイズがのってしまう。
なので今度はVIVID Labs.さんから知恵を拝借、IE用のフィルタ・AlphaImageLoaderを使用して回避する。
<!--[if lte IE 8 ]> <script language="javascript"> jQuery(function() { if(navigator.userAgent.indexOf("MSIE") != -1) { jQuery('img').each(function() { if(jQuery(this).attr('src').indexOf('.png') != -1) { jQuery(this).css({ 'filter': 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + jQuery(this).attr('src') + '", sizingMethod="scale");' }); } }); } }); </script> <![endif]-->
WP-Cycleのタグ直後にでも、「IE8以下だったらこのフィルタをpng画像に適用する」と指定。
wordpressなので$をjQueryに変更しています。
これでIEでも(多少ジャギるけど)透過でフェード表示させることが出来ました。