object.watchを現在のスクリプトに組み込む?混乱している
-
28-10-2019 - |
質問
回答で質問を更新!!
元の質問
私はeliのobject.watch(https://gist.github.com/384583)スクリプトを見てきましたが、それのアイデアとそれが何をするのか理解していますが、スクリプトで実際にそれを使用する方法についてとても混乱しています!これがほとんどの人にとって非常に明白に思えたとしても、私はそれを見ていません:s
私はそれに対する間違ったアプローチを完全に試みているかもしれませんし、Object.Watchは私が実際に使用する必要があるものではありません!
ここにスクリプトがあります:
<script type="text/javascript">
jQuery.fn.elementlocation = function() {
var curleft = 0;
var curtop = 0;
var obj = this;
do {
curleft += obj.attr('offsetLeft');
curtop += obj.attr('offsetTop');
obj = obj.offsetParent();
} while ( obj.attr('tagName') != 'BODY' );
return ( {x:curleft, y:curtop} );
};
$(document).ready( function() {
$("#gdimage").mousemove( function( eventObj ) {
var location = $("#gdimage").elementlocation();
var x = eventObj.pageX - location.x;
var y = eventObj.pageY - location.y;
x = x / 5;
y = y / 5;
x = (Math.floor( x ) + 1);
y = (Math.floor( y ) + 1);
if (y > 1) {
block = (y * 200) - 200;
block = block + x;
} else {
block = x;
}
x = ((x * 2) + (x*3)) - 4;
y = ((y * 2) + (y*3)) - 4;
x = (Math.floor( x ));
y = (Math.floor( y ));
$("#block").text( block );
$("#x_coords").text( x );
$("#y_coords").text( y );
$.ajax({
type: "GET",
url: "fetch.php",
data: "x=" + x + "&y=" + y + "",
dataType: "json",
async: false,
success: function(data) {
$("#user_name_area").html(data.username);
}
});
$("#gdimage").click( function( eventObj ) {
window.location = "/redirect/?x=" + x + "?y=" + y + "";
});
});
});
</script>
これで、あなたが言うことができるように、マウスの動きがajaxを介してfetch.phpページから絶えずデータを呼び出すと、サーバーの負荷がかなり高くなります。したがって、私がやろうとしていることは、変数「ブロック」が値を変更した場合にのみAjaxを呼び出すことです。
だから、私はどこかに値を保存する必要があると思いますが、値が変更された場合、保存された値でそれをチェックしますが、もちろん、保存された値は常に変化を常に変化させることによって決定されるため、常に新しい値に変わりますか?
答え
object.watchを使用したいと思うことで間違ったアプローチを取っていたようです。Paul_wilkinsの助けを借りて、彼はjqueryデータ(http://api.jquery.com/data)を使用して情報を保存する方法を教えてくれました。また、私の方程式も単純化しますハハ
これが新しいコードです:
<script type="text/javascript">
jQuery.fn.elementlocation = function() {
var curleft = 0;
var curtop = 0;
var obj = this;
do {
curleft += obj.attr('offsetLeft');
curtop += obj.attr('offsetTop');
obj = obj.offsetParent();
} while ( obj.attr('tagName') != 'BODY' );
return ( {x:curleft, y:curtop} );
};
$(document).ready( function() {
$("#gdimage").mousemove( function( eventObj ) {
var location = $("#gdimage").elementlocation();
var x = eventObj.pageX - location.x;
var y = eventObj.pageY - location.y;
x = x / 5;
y = y / 5;
x = (Math.floor( x ) + 1);
y = (Math.floor( y ) + 1);
block = x + (y * 200) - 200;
x = ((x * 2) + (x*3)) - 4;
y = ((y * 2) + (y*3)) - 4;
x = (Math.floor( x ));
y = (Math.floor( y ));
$("#block").text( block );
$("#x_coords").text( x );
$("#y_coords").text( y );
if (block != $('#gdimage').data('storedBlock')) {
$.ajax({
type: "GET",
url: "fetch.php",
data: "x=" + x + "&y=" + y + "",
dataType: "json",
async: false,
success: function(data) {
$("#user_name_area").html(data.username);
}
});
}
$('#gdimage').data('storedBlock', block);
$("#gdimage").click( function( eventObj ) {
window.location = "/redirect/?x=" + x + "&y=" + y + "";
});
});
});
</script>
解決
object.watchを使用したいと思うことで間違ったアプローチを取っていたようです。Paul_wilkinsの助けを借りて、彼はjqueryデータ(http://api.jquery.com/data)を使用して情報を保存する方法を教えてくれました。また、私の方程式も単純化しますハハ
これが新しいコードです:
<script type="text/javascript">
jQuery.fn.elementlocation = function() {
var curleft = 0;
var curtop = 0;
var obj = this;
do {
curleft += obj.attr('offsetLeft');
curtop += obj.attr('offsetTop');
obj = obj.offsetParent();
} while ( obj.attr('tagName') != 'BODY' );
return ( {x:curleft, y:curtop} );
};
$(document).ready( function() {
$("#gdimage").mousemove( function( eventObj ) {
var location = $("#gdimage").elementlocation();
var x = eventObj.pageX - location.x;
var y = eventObj.pageY - location.y;
x = x / 5;
y = y / 5;
x = (Math.floor( x ) + 1);
y = (Math.floor( y ) + 1);
block = x + (y * 200) - 200;
x = ((x * 2) + (x*3)) - 4;
y = ((y * 2) + (y*3)) - 4;
x = (Math.floor( x ));
y = (Math.floor( y ));
$("#block").text( block );
$("#x_coords").text( x );
$("#y_coords").text( y );
if (block != $('#gdimage').data('storedBlock')) {
$.ajax({
type: "GET",
url: "fetch.php",
data: "x=" + x + "&y=" + y + "",
dataType: "json",
async: false,
success: function(data) {
$("#user_name_area").html(data.username);
}
});
}
$('#gdimage').data('storedBlock', block);
$("#gdimage").click( function( eventObj ) {
window.location = "/redirect/?x=" + x + "&y=" + y + "";
});
});
});
</script>