• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:スマートフォンサイト制作について、ご教授ください。)

スマートフォンサイト制作におけるJavaScriptの問題と対策

このQ&Aのポイント
  • スマートフォンサイトを制作中に、JavaScriptの組み込みに問題が発生しました。特に、「tilt.js」の縦横切り替え機能がAndroidでうまく機能しない状態です。
  • Androidでの切り替え処理に問題があり、推測では「heightLine.js」の「window.onresize」の処理が機能せず、これが現象の原因と思われます。
  • JavaScriptの知識が浅く、改善方法がわからない状況です。他のブロック要素揃えのJavaScriptも試しましたが、動的な要素揃えには「heightLine.js」が最適です。お力をお借りして解決策を教えていただけると幸いです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

window.onなんちゃら に直接関数突っ込んでるところを addEventListenerに変更すれば動くようになると思いますよ。 あとはtilt.jsがやってる事をフレキシブルボックス化するって手も使えそう。スマホならね。 ★tilt.js 好きな方使ってください $(document).ready(function(){ tilt(); var agent = navigator.userAgent; if(agent.search(/iPhone/) != -1){ $(window).on('orientationchange', tilt); // window.addEventListener('orientationchange', tilt); }else{ $(window).on('resize ', tilt); // window.addEventListener('resize ', tilt); } }); ★heightLine.js window.onresize=changeBoxSize; ↓ addEvent(window, 'resize', changeBoxSize); tilt.jsの $(document).ready 以降とheightLine.jsのaddEvent部分を ファイルから削除してまとめたらすっきりすると思います。 $(document).ready(function(){ tilt(); heightLine(); var agent = navigator.userAgent; if(agent.search(/iPhone/) != -1){ $(window).on('orientationchange', tilt); }else{ $(window).on('resize ', tilt); } $(window).on('resize ', heightLine); });

dededann
質問者

お礼

お返事が遅くなってしまい、申し訳ありません。 お教えいただいた通りに試してみたところ、正常に動作しているようです! スマホサイトに必要な縦横切り替えと今回の課題であった高さを揃える処理を同時に行うことができ、理想的な仕様にすることができました! 細かい解説付きでご回答いただき、ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • div要素の幅をWindow幅に合わせて変更したい

    下記のような形でdiv要素の#main_frameの幅を$(window).width()の値に合わせて指定しているのですが、ブラウザのwindowサイズを操作した場合に表示が崩れてしまいます。 windowサイズの操作がなされた場合、#main_frameの幅も自動的に変わるようにしたのですが方法はありますでしょうか。 <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript">   $(document).ready(function(){     $('#main_frame').css('width', ($(window).width() - 110) + 'px');   }); </script>

  • <body>にwindow.onload = functionを2つ設定すると、最後に書いたイベントだけが実行されてしまいます。

    <body>タグにonloadイベントを実行させる2つの外部jsを<head>内に設置し実行すると、 最後に記述したイベントだけが反映されてしまいます。 http://blog.webcreativepark.net/2008/02/26-185844.html を参考にいろいろといじってはみたのですが、 function addEvent(elm,listener,fn){ try{ elm.addEventListener(listener,fn,false); }catch(e){ elm.attachEvent("on"+listener,fn); } } js初心者でして、上の関数の中にどのように記述をすれば良いのかわかりません。 IE6・IE7・safariで動作させるには、実際にどのようなソースを書けばいいのでしょうか。 どなたかご教授いただけますでしょうか。 <head>内の外部jsは、以下のように記述しました。 <script src="/A.js" type="text/javascript"></script> <script src="/B.js" type="text/javascript"></script> </head> 外部jsのソースは以下になります。 //A.js window.onload = function() { var blur = function () { this.blur() }; for (var i = 0; i < document.links.length; i++) document.links[i].onfocus = blur; } //B.js window.onload = function() { prepZooms(); insertZoomHTML(); zoomdiv = document.getElementById(zoomID); zoomimg = document.getElementById(theID); } 以上になります。宜しくお願い致します。

  • webの開発をしています。

    webの開発をしています。 JavaScriptを変更したので、キャッシュの問題をクリアしようとjsファイル名を代えました。 ところが関数名は同じだからでしょうか、IE6ではぜんぜん新しいjsファイルを読み込んでくれません。 変更したのにエラーになり、デバッグモードで開くと、古いjsファイルの内容が表示されます。 その内容を全て選択して、エディタで見てみると見事に古いjsファイルそのままです。 インターネットオプションのツールの履歴やクッキーの削除を何度行っても変わらずです。 パソコンを立ち上げなおしてもダメでした。 今回、window.openを使って、メニューバー、ツールバーを消し、 F5やF11のどイベントキーを効かなくする処理も入れました。 F5が効かないからかな・・・と、最後にはイベントキーの無効処理ははずしたのですが やっぱり同じく、JavaScriptのerror(古い処理の)になります。 無効にしたのにF5は効きませんでした。 当然、それまでそのサイトを動かしていなかったパソコンでは新しいバージョンでjsは正常に動きます。 キャッシュをまっさら(?)にする方法って無いでしょうか? 関数名が同じだとjsファイル名を変更しても無意味でしょうか? アドバイスをお願いいたします。

  • Javascriptでブラウザ判別、iframe内の子要素にscrollingの指定をするには?

    Javascript初心者です。いろいろ探したのですが解決方法がわかりません。 index.htmlにiframe(name=""main)があり、それぞれの子要素にtarget="main"で指定しているHPを作成したのですが、子の要素にカスタマイズスクロールバー(flexcroll http://youmos.com/news/flexcroll_js )を取り入れています。 ※ちなみに上記iframeはindex.html内でサイズやリンク先などを指定しているのですが、そこでscrolling="no"にしています(子のflexscrollと重複するので)。 MacIEとSafariではスクロールバーが表示されません。(Winはfirefox、IE6、Opera9、Netscape7.1、Macではfirefoxはflexcroll表示確認済みです。) その不具合の対処にindexのhead内に<script type="text/javascript" src="../js/distinction.js"></script>にブラウザ判別をさせて、 MacIEとSafariには別のjsファイルを適用させ、flexcrollを無効にし、デフォルトのスクロールバーが出るように指定したいのですが、 上記※にあるとおり、index内でiframeのscrollingをnoにしているため、どうしたらいいのかわからなくて困っています。 下記がdistinction.js内のスクリプトです(調べながら作成したので自信がありません)。 // JavaScript Document if(navigator.userAgent.indexOf('Gecko/')!=-1) { document.write('<script language="javascript" src="js/flexcroll.js"></scr'+'ipt>\n'); } else if (document.window.clipboardData) { document.write('<script language="javascript" src="js/flexcroll.js"></scr'+'ipt>\n'); } else { document.write('<script language="javascript" src="js/macIE.js"></scr'+'ipt>\n'); } } else if (window.opera) { document.write('<script language="javascript" src="js/flexcroll.js"></scr'+'ipt>\n'); } else if(navigator.userAgent.indexOf('AppleWebKit')!=-1) { document.write('<script language="javascript" src="js/macsafari.js"></scr'+'ipt>\n'); } else { document.write('<script language="javascript" src="js/other.js"></scr'+'ipt>\n'); } // --> また、flexcroll.jsを適用しないもののjsファイルの中身もなんと記述したらいいのかわかりません。そもそも、この対処法であっているのでしょうか? 間違いや解決方を教えてください。

  • JavaScriptでIE6を検知し、転送する。

    IE6からアクセスされた場合、 ・アラートを表示してアップグレードを促す。 ・同時にアップグレード用のウェブページに転送する。 という処理をJavaScriptで行いたいと思いました。 ブラウザ判別は、↓こちらのサイトを参考にしました。 http://winofsql.jp/VA003334/infoboard.php?mid=sjscript&id=070828100942&pid=3 そして、以下のコードをhead内に記入しています。 ============================== <script type="text/javascript"> var userAgent = window.navigator.userAgent.toLowerCase(); var appVersion = window.navigator.appVersion.toLowerCase(); if (userAgent.indexOf("msie") > -1) { if (appVersion.indexOf("msie 6.0") > -1) { window.alert("InternetExproler Ver.6 をご利用の方は、新しいバージョンへアップグレードして下さい。"); window.location.href = "http://www.xxxxxxxxxx.com"; } } </script> ============================== IEtesterで試すと、一応Ver.6の際に、狙った動作はしています。 しかし、何故かIEtester上で「ScriptError」が表示されます。 JavaScriptは、だいぶ不安があるので、この「ScriptError」が気になって仕方ありません。 やはりどこか悪いところがあるのでしょうか。。 どなたかご意見を聞かせて下さい。 また、headの中に長々と書くのも好きではないので、上の内容を丸ごとコピーして、「ie6.js」というファイル名をつけ、jsディレクトリに入れ、下のようにしました。 <script type="text/javascript" src="js/ie6.js"></script> こうすると何故かアラートの文字が文字化けしてしまいます。 (head内に書いてる時はしない。) 何故なのでしょうか。 よろしくお願い致します。

  • 【HP制作】画像を画面いっぱいに表示したい

    こんにちは。 質問させていただきます。 現在、サイト制作の勉強をしています。 ブログ記事の中にある画像をクリックすると、灰色に透過されたレイヤーと画像が画面いっぱいに最前面に現れる機能を実現したいのですが、やり方がわからなく困っています。 javascriptを使う?方法だと勝手に推測しているのですが、それ以外は...です。 下記のサイトを参考にしています。(記事中の画像をクリックすると確認できます。) http://blog.honeyee.com/mmizoguchi/ とても基礎的なこととは思いますが、ご教授頂けたら幸いです。 宜しくお願い致します!

  • 新規にページを開いてそのページにあるフォームに任意の値を入れたい

    新規にページを開いてそのページにあるフォームに任意の値を入れたい。 タイトルのとおりですが、 例えば、 1.自分のページでとあるリンク「 javascript について質問する。」をクリックする。 2.新規ウィンドウでページ「教えて!goo - 新規質問」が開く。 3.質問タイトルに「 javascript についての質問です。」が既に入力済みとなっている。 というような処理を javascript で実装することは可能なのでしょうか。 (教えて!goo だけでなくて Yahoo!JAPAN のトップページの検索ボックスでも何でも構いません。) prototype.js などいろんな公開されている js ファイルを使用するので構いません。 もしわかる方がいましたら、よろしくお願いします。 趣味程度ですので、暇なときにご回答いただければ幸いです。

  • jQueryプラグイン、サーバー上だと動かない。

    こんにちは。 このたび制作しているWEBサイトにjQueryプラグインのprettyphotoを実装したいのですが、ローカルの環境では問題なく動いてくれるのですが、サーバーにアップしたとたんにエラーがでてしまいまったく動いてくれません。 <head>内のスクリプトの記述は <script src="js/libs/modernizr-2.0.6.min.js"></script> <script src="js/prettyphoto/js/jquery-1.6.1.min.js"></script> <script src="js/prettyPhoto/js/jquery.prettyPhoto.js"></script> <script type="text/javascript" charset="utf-8"> $(document).ready(function(){ $("a[rel^='prettyPhoto']").prettyPhoto({theme:'light_rounded'}); }); </script> という感じです。 ※そのほか直前にprettyphotoのCSSは読み込んでおります サーバーにアップしたページのソースをみてみるとCan't find variable:$というメッセージがでていたのでプラグインの記述を (function($){ // $(document).ready(function(){ $("a[rel^='prettyPhoto']").prettyPhoto({theme:'light_rounded'}); }); }(jQuery)); // にしてみてもCan't find variable:jQueryというメッセージがでてきてしまいます。 こちらもともとテンプレートであったサイトを改変しているものなので、このほかHTML後半部分にもいろいろjavascriptの記述があります。以下となります。 <script>window.jQuery || document.write('<script src="js/libs/jquery-1.7.1.min.js"><\/script>')</script> <script type="text/javascript" src="js/jquery.easing.1.3.js"></script> <script type="text/javascript" src="js/jquery.easing.compatibility.js"></script> <script type="text/javascript" src="js/jquery.validate.pack.js"></script> <script type="text/javascript" src="js/cycle/jquery.cycle.all.latest.js"></script> <script type="text/javascript" src="js/jquery.tweet.js"></script> <!-- super fish js include --> <script type="text/javascript" src="js/superfish/js/superfish.js"></script> <script type="text/javascript" src="js/superfish/js/hoverIntent.js"></script> <script defer src="js/plugins.js"></script> <script defer src="js/script.js"></script> レイアウトが崩れないようひとつひとつとりはずしてみたのですがprettyphotoは動いてくれませんでした。 またパスが間違っていないかも何度もチェックはしたつもりです。 本当に困っているのですが、このような時どうやって原因を探していけばよいのか、何かアドバイスを いただけたらと思い投稿させていただきました。 当方、WEB制作初心者のため、見当はずれなことを訊いていましたらご容赦ください。 どうぞよろしくおねがいします。

    • ベストアンサー
    • HTML
  • jqueryを2つ設置した事で片方が動かなくなる

    お世話になります かなり困っていますのでわかる方いらっしゃれば宜しくお願い致します 現在サイト内にjqueryを2つ設置しました ・一つは左グローバルメニューに伸縮するタイプのメニュー ・もう一つは画像をクリックするとポップアップの様になるスライドショー 少し自分で調べてみた所<script type=~></script> の書く順序によって片方が効いたり効かなかったりという所まではわかりました しかし、順序を変えても2つが共存する所まで行けません そもそも順序だけでは無いのでしょうか? 以下を見てわかる方いらっしゃれば 是非お意見頂ければと思います 宜しくお願い致します 以下<head>内タグになります 今の状況だと左伸縮メニューは機能せず ポップアップスライドショーが機能しています <head> <!--左側伸縮メニュー--> <script type="text/javascript" src="./js/mootools-core.js"></script> <script type="text/javascript" src="./js/byslidemenu.js"></script> <script type="text/javascript"> window.onload = function(){ new BySlideMenu('verticalmenu', {vertical: true}); } </script> <!--//左側伸縮メニュー--> <!--ポップアップスライドショー--> <script type="text/javascript" src="./js/jquery.easing.1.3.js"></script> <script type="text/javascript" src="./js/jquery-1.3.2.min.js"></script> <script type="text/javascript" src="./js/jquery.fancybox-1.2.1.pack.js"></script> <script type="text/javascript"> $(function() { $('a.large').fancybox(); }); </script> <!--//ポップアップスライドショー--> </head> かなり困っています 是非お力添えの程よろしくお願い致します

  • IEのみスクロールイベントで要素がちらつきます

    スクロールイベントで要素を追尾する処理をJavaScriptで記述しました。 他のブラウザでは綺麗に追尾してくれているのですが IE(ver9)だけ要素がちらつきながら追尾します。 スムーズにしたいのですが以下のソースのどこがいけないのでしょうか? 解決方法を教えて下さい。 [HTML] <a id="pageTopButton" href="#">ページ上部へ</a> [CSS] #pageTopButton { width: 100px; position: relative; } [JavaScript(jQuery)] /////初期設定 var viewWindowBottom = $(window).scrollTop() + $(window).height(); $("#pageTopButton").css("top", (viewWindowBottom - ($("#pageTopButton").height())) + "px"); ////画面をスクロール時のイベント $(window).scroll(function(){ var viewWindowBottom = $(window).scrollTop() + $(window).height(); $("#pageTopButton").css("top", (viewWindowBottom - ($("#pageTopButton").height())) + "px"); });