質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

659閲覧

WordPressでJavascriptのstyle.marginTopが動かない

a2h1r0

総合スコア7

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/04/19 16:07

編集2020/04/20 01:24

前提・実現したいこと

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;

この部分だけがデバッグモード外したら動きません.

どなたかお力をお貸しください.よろしくお願いします...

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2020/04/20 02:01

その要素の、marginTopの値は、最終的にはどんな感じになってますか? 可能性として、 要素、そのサイズなどが取得できているっていうことは、 その行以降の処理で、質問者さん自身のか、もしくは別ライブラリにおいて、 値が改変されている可能性があると思いまして、質問でした。
kei344

2020/04/20 04:55

まだ質問が「受付中」になっていますが、いったんご自身の回答をもって「解決済」にされてはいかがでしょうか。
a2h1r0

2020/04/20 06:59

すみません.お騒がせ致しました. 解決済みにさせていただきます.
guest

回答1

0

自己解決

早速の回答ありがとうございます.

実はついさっき,自己解決してしてしまいました^^;
結論としては,.styleではなく.setAttributeを使用することで動作しました.

ただ,.styleが動かない理由がイマイチわからないので,なにか思いつくことがあれば,教えてくださると幸いです.

↓自身のブログにて試したことなど詳細を投稿しています.こんな感じでした.(アフィリエイトとかではないです)
WordPressでJavascriptのstyle.marginTopが動かない

投稿2020/04/20 02:29

a2h1r0

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi_takatsuk

2020/04/20 05:31

これ、原因めちゃ気になりますね。 HTMLElementとして認識されてないのかな・・・。 汎用的な要素なんですよね? オリジナル要素とかだったら、styleプロパティでは、だめなのかも。 (styleは内部的にセッターが動いていると思われるため、JavaScript上でHTMLElementである必要がある) もしかしたら、xml拡張的な新要素だが、(その場合setAttributeは効きます)ブラウザの処理では、style属性あるから、CSS効いた、とか・・・?
a2h1r0

2020/04/20 07:06

何がしたいかと言うと,YouTube埋め込み動画の上に画像を表示してあげたいということで,divで画像エリアを作って,それを動画の中央になるように上マージンを取っているだけなのですが... div自体は普通のモノですし,強いて言うならYouTube埋め込み動画のほうがAPIで内部的にiframeに変換されているんですが,今回はdivの方のstyleを変更する話ですし... これ一番不思議なのが,なぜデバッグモードでは正常に動作するのかなんですよね...読み込み順とか変化するのかなあと思ったのですが. 回答ありがとうございました.迷宮入りです...^^;
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問