私は、HTML5 localStorageを使用してユーザーページ上の位置を記憶するdraggable div要素を持っています。これは正常に動作します。HTMLローカルストレージでjquery draggableを使用するとdiv位置が若干オフセットされる
また、別の開いているタブでdivをドラッグした場合、位置を更新するのにwindow.addEventListener
を使用しています。これは動作しますが、1つのブラウザタブ内のdivの位置は、別のタブのdivにわずかにオフセットされています。誰がこれを引き起こしているか知っていますか?
基本的な例を以下に示します。それをHTMLファイルとして保存し、2つの異なるタブで開き、何が起こっているかを確認します。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
<style type="text/css">
.note
{
position: absolute;
width:200px;
height:220px;
background: #2E2E2E;
top: 50px;
left: 50px;
transform:rotate(7deg);
-ms-transform:rotate(7deg);
-moz-transform:rotate(7deg);
-webkit-transform:rotate(7deg);
-o-transform:rotate(7deg);
}
</style>
<script type="text/javascript">
$(function() {
var note = $(".note");
updatePosition(note);
note.draggable({ stop: function() {
var left = $(this).position().left;
var top = $(this).position().top;
localStorage.setItem("left", left);
localStorage.setItem("top", top);
}
});
window.addEventListener("storage", function (e) {
updatePosition(note);
},
false);
});
function updatePosition(note) {
var left = localStorage.getItem("left");
var top = localStorage.getItem("top");
note.css({ left: left + "px", top: top + "px" });
}
</script>
</head>
<body>
<div class="note"></div>
</body>
</html>
UPDATE:オフセットの原因となるCSS変換プロパティ。
+1、優れた質問をしてみてください。もっと多くの人がこのように質問してほしいです... –
jqueryライブラリがどこからインクルードされるのか心配することなく、ソースコードをファイルにローカルに貼り付けることができるので、これは本当に便利な質問です。 –
このファイルを2つの異なるタブで開き、1つのdivを移動すると、他のdivも同じタブに移動するようです。奇妙な! –