• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【jQuery】要素を合わせた横幅の取得について)

jQueryで要素の横幅を取得する方法について

このQ&Aのポイント
  • 現在、要素が横並びになった横スクロールのサイトを作成中です。各コンテンツ要素のsectionの横幅は固定ではなく、縦幅に合わせて可変するようにしています。しかし、wrapにsectionの幅を足した合計の横幅を正しく取得できずに問題が発生しています。
  • この問題を解決するために、jQueryを使用して要素の横幅を取得する方法を調査しています。現在のコードでは、コンテンツの横幅を計算するためにouterWidth()メソッドを使用していますが、正しい結果を取得できていません。
  • 調査の結果、outerWidth()メソッドは要素のマージンを含んだ横幅を取得するため、正確な結果が得られないことがわかりました。そのため、marginを考慮せずに要素の横幅を取得する方法を見つける必要があります。

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

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

> var cont = $('.wrap');//コンテンツの横サイズ > var contW = $('.section').outerWidth(true) * $('div',cont ).length; 上の2行がわかりませんね。 > var cont = $('.wrap');//コンテンツの横サイズ これは $('#secWrap') ですかね? > var contW = $('.section').outerWidth(true) * $('div',cont ).length; $('.section').outerWidth(true)って一番最初のしかとれてない気がします。 $('div',cont ).length は.sectionの中にdivタグがあっても取得してしまいます。 なので、 var contW = 0; $('#secWrap').children(".section").each(function(){ contW += $(this).outerWidth(true); }); のようにして個々のdivを足していく必要があるのではないでしょうか?

okyesno
質問者

お礼

すみません、コンテンツ幅を多めにCSSで設定したところうまく動作しました! ありがとうございました!

okyesno
質問者

補足

ご回答いただきありがとうございます!! 少しコードをいじっておりますが、 下記の要素に var cont = $('.wrap,body');//コンテンツの横サイズ bodyを追加したところ、カラム落ちはしなくなったのですが、 bodyタグにsectionを合わせた合計幅よりも長いwidthのpxが付き、 一番最後のコンテンツの右に空白が出来てしまい必要のないスクロールがついてしまいました。 Hanagefactoryさんから教えてもらった事を参考に、 var contW = $('.section').outerWidth(true) * $('div',cont ).length;の一行を消去し、 下記のようにかいてみたのですが、横幅をうまく取得できませんでした。。 初歩的なミスかと思いますが、どのようにかけば、うまく動きますでしょうか。 お手数おかけいたしますが教えて頂けたら助かります。。 $(function(){    function adjust(){ var h = $(window).height(); var h1= $('#header').height(); //他要素の高さ var p1= $('#subHead').height(); //他要素の高さ $('.section,.#secWrap').css('height', h-h1-p1); //可変部分の高さを適用 var cont = $('.wrap');//コンテンツの横サイズ var contW = 0; $('#secWrap').children(".section").each(function(){ contW += $(this).outerWidth(true); }); cont.css('width', contW); var speed = 50; $('html').mousewheel(function(event, mov) { $(this).scrollLeft($(this).scrollLeft() - mov * speed); $('body').scrollLeft($('body').scrollLeft() - mov * speed); return false; }); } adjust(); $(window).on('resize', function(){ adjust(); }) });

関連するQ&A