jQuery draggable,resizable 要素のサイズがずれる
uiプロパティ以外で要素のサイズ取得を試みる
draggableとresizableを使用し要素のサイズ変更や、移動後のサイズを取得するには
uiプロパティからアクセスするのが一般的かも知れませんが、cssでmarginやpaddingを指定した場合は
cssのプロパティを抜いた値しか取得できません。
何故かは分かりませんが、きっと親切設計なんだと思います。。。
動作環境、jQueryバージョン
jquery-1.9.1
Firefox 27.0.1
要素の横幅が100pxになるようにし、styleを設定した場合
・script
100px伸ばして計200pxになるようにした場合
[対象ノード].resizable({ // 一度に移動できる幅を固定 grid: [ 100, 100 ], stop: function(event, ui) { // ui.size['width'] 188pxが返されます。 // $(this)[0]['clientWidth'] 188pxが返されます。 } });
今回は200pxの値が欲しいので、思った通りの結果になりません。
不足分の12pxを足せばそれで良いのですが、cssのプロパティ値に変更があった場合を考慮しちょっとコードを追加
$('.mn').resizable({ stop: function(event, ui) { var width = getNodeWidth($(this)); //200が返ってきます } }); // pxを外しnumberで返却 function removePx(string) { var s = string.replace("px", ""); return Number(s); }; // ノードの横幅を計算する function getNodeWidth(node) { //jqury1.9以降では一括で各値を取得できるようになりました。 var cscProperty = node.css(['width','margin-left','margin-right','padding-left', 'padding-right']); var width = 0; for (var i in cscProperty) width += removePx(cscProperty[i]); return width; }
今回はwidthだけですが、heightも同じように取れると思います?
もっと簡単な方法が有れば良いのですが、取り敢えずぱっと思いついた処理でした。
関連記事
-
-
jQuery 水平スクロール&cssでカスタム可能なスクロールバーなプラグイン
水平スクロール&cssでカスタム可能なスクロールバーなプラグイン jQueryを使ったプラグインは
-
-
Androidで課金アプリ作製 定期購読サンプルコード編
Androidで課金アプリ作製 定期購読編 In-app Billing v3を使用したアプリ開発
-
-
Macで ローカルサーバー構築 ローカルネットワーク参加編
Macで ローカルサーバー環境を構築するまで Apache設定編 ネットでの情報は必要最低限しか載
-
-
Androidで課金アプリ作製 プロセス間通信予習編
Androidで課金アプリ作製 プロセス間通予習編 課金アプリを作成の際にaidlファイルを利用す
-
-
jQuery 要素の相対位置
jQueryを使って要素の相対位置を調べる Google先生に「jquery offsetLeft
-
-
jQuery removeClass 特定のクラスを全て削除
特定のクラスを全て削除 フォームを作成した時に、入力項目に不備があった場合は目立つ様にinput属
-
-
Apache 500 Internal Server Error
久しぶりに自宅のローカルサーバーを動かしたら「Server error!」が出てゑっ!? 解決方法
-
-
PHP MySQL 重複行を抽出 ロジックで高速化
PHP MySQL 重複行を抽出 ロジックで高速化 ロジックで高速化は釣りになっているかもしれませ
-
-
C言語 バッファオーバーランまで ポインタ考察編
趣旨 ただC言語を勉強してもモチベーションがあがり辛いので、 取り合えずバッファオーバーランを目
-
-
Google Cloud Messaging プロジェクトナンバー API Key取得編 2014/07最新版
Google Cloud Messaging プロジェクトナンバー APK取得編 コンソールの仕様