前提・実現したいこと
WordPressでJavascriptのstyle.marginTopが動かない.
Javascriptで要素サイズを取得,計算して別の要素のmargin-topに使いたいのですが,うまくいきません.
...デバッグモードをtrueにして開発中,うまく動いていたのですが,公開のためにfalseにしたところ,なぜか動かないのです.
発生している問題・エラーメッセージ
デバッグモードfalseの場合
正常に動作する.
デバッグモードtrueの場合
console.logで確認したところ,要素のサイズなどは取得できているが,"要素.style.marginTop"の値が空で出力される.
試したこと
BJ Lazy Loadという読み込み遅延系のプラグインを入れてたこともあり,とりあえず全てのプラグインを無効化 → ダメ
Javascriptのみデバッグを入れてみる「define('SCRIPT_DEBUG', true);」 → ダメ
あとはソースコードは色々触ってみましたが...
該当のソースコード
PHP
1 <?php // YouTube埋め込み ?> 2 <?php if (!empty($data_list['youtube'][0])) { 3 // URLから動画IDのみ抽出 4 $videoId = ltrim($data_list['youtube'][0], 'https://youtu.be/'); ?> 5 6 <?php // 幅取得用 ?> 7 <div id='get-width'></div> 8 9 <?php // 提供元 ?> 10 <div id='presented-by'> 11 <a href="https://www.hogehoge.com/" data-lightbox="group"><img src="hogehoge.png"></a> 12 </div> 13 14 <!-- 1. The <iframe> (and video player) will replace this <div> tag. --> 15 <div id='youtube'></div> 16 17 <script> 18 //*** 動画のアスペクト比 ***// 19 var aspectWidth = 16, 20 aspectHeight = 9; 21 22 23 jQuery(function ($) { 24 $('#presented-by').hide(); 25 }); 26 27 // 動画の横幅は100%で比率に合わせて表示 28 var youtubeWidth = document.getElementById('get-width').clientWidth, 29 youtubeHeight = (youtubeWidth/aspectWidth) * aspectHeight; 30 31 // 提供元の表示位置を中央に調整 32 var presentedBy = document.getElementById('presented-by'); 33 presentedBy.style.marginTop = youtubeHeight/2 - presentedBy.clientHeight/2; 34 35 36 // 2. This code loads the IFrame Player API code asynchronously. 37 var tag = document.createElement('script'); 38 39 tag.src = "https://www.youtube.com/iframe_api"; 40 var firstScriptTag = document.getElementsByTagName('script')[0]; 41 firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); 42 43 // 3. This function creates an <iframe> (and YouTube player) 44 // after the API code downloads. 45 var player; 46 var videoId = <?php echo json_encode($videoId); ?>; 47 function onYouTubeIframeAPIReady() { 48 player = new YT.Player('youtube', { 49 width: youtubeWidth, 50 height: youtubeHeight, 51 videoId: videoId, 52 events: { 53 'onReady': onPlayerReady, 54 'onStateChange': onPlayerStateChange 55 } 56 }); 57 } 58 59 // 4. The API will call this function when the video player is ready. 60 function onPlayerReady(event) { 61 event.target.playVideo(); 62 } 63 64 // 5. The API calls this function when the player's state changes. 65 // The function indicates that when playing a video (state=1), 66 // the player should play for six seconds and then stop. 67 var done = false; 68 function onPlayerStateChange(event) { 69 // 動画終了後と一時停止中に画像を表示 70 var status = player.getPlayerState(); 71 if (status == 0 || status == 2) { 72 jQuery(function ($) { 73 $('#presented-by').fadeIn(1000); 74 }); 75 } else { 76 jQuery(function ($) { 77 $('#presented-by').fadeOut(1000); 78 }); 79 } 80 } 81 </script> 82 <?php } ?>
以上のコードの
Javascript
1presentedBy.style.marginTop = youtubeHeight/2 - presentedBy.clientHeight/2;
この部分だけがデバッグモード外したら動きません.
どなたかお力をお貸しください.よろしくお願いします...
回答1件
あなたの回答
tips
プレビュー