gpt4 book ai didi

php - jQuery AJAX 调用 mousemove

转载 作者:搜寻专家 更新时间:2023-10-31 20:53:45 27 4
gpt4 key购买 nike

我有一个用 gdimage 创建的图像,它有 40000 个 5x5 block 链接到不同的用户配置文件,我希望当你将鼠标悬停在其中一个 block 上时,AJAX 将通过检测 x 和当它在图像上移动时 y 坐标。

然后当它被点击时,它获得的信息会链接到该用户的个人资料。

这是我目前得到的:

Javascript/jQuery:

<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 x_org = eventObj.pageX - location.x;
var y = eventObj.pageY - location.y;
var y_org = 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;

}

$("#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);
}
});

});

});

</script>

PHP:

<?

require('connect.php');

$mouse_x = $_GET['x'];
$mouse_y = $_GET['y'];

$grid_search = mysql_query("SELECT * FROM project WHERE project_x_cood = '$mouse_x' AND project_y_cood = '$mouse_y'") or die(mysql_error());

$user_exists = mysql_num_rows($grid_search);

if ($user_exists == 1) {

$row_grid_search = mysql_fetch_array($grid_search);

$user_id = $row_grid_search['project_user_id'];


$get_user = mysql_query("SELECT * FROM users WHERE user_id = '$user_id'") or die(mysql_error());

$row_get_user = mysql_fetch_array($get_user);

$user_name = $row_get_user['user_name'];
$user_online = $row_get_user['user_online'];

$json['username'] = $user_name;
echo json_encode($json);

} else {

$json['username'] = $blank;
echo json_encode($json);

}

?>

HTML

<div class="tip_trigger" style="cursor: pointer;">

<img src="gd_image.php" width="1000" height="1000" id="gdimage" />

<div id="hover" class="tip" style="text-align: left;">
Block No. <span id="block"></span><br />
X Co-ords: <span id="x_coords"></span><br />
Y Co-ords: <span id="y_coords"></span><br />
User: <span id="user_name_area">&nbsp;</span>
</div>

</div>

现在,mousemove 位置的“ block ”、“x_coords”和“y_coords”变量工作正常并显示在 span 标记中,但它没有从 AJAX 函数获取 PHP 变量,我不明白为什么。

我也不知道如何做到这一点,所以当单击鼠标时,它会获取从 fetch.php 中获取的变量,并将用户定向到一个页面,例如“/user/view/?id=VAR_ID_NUMBER”

我是不是用错了方法,还是做错了?谁能帮忙? :)

最佳答案

请参阅有关对每次鼠标移动都进行提取的评论。坏坏坏主意。使用一些节流。

也就是说,问题是,您没有以任何方式在成功函数中使用结果。

您的 PHP 函数不会向浏览器返回任何内容。 PHP 变量不会奇迹般地对您的客户端 JavaScript 可用。 PHP 简单地运行,生成一个 HTML 页面作为输出,并将其发送到浏览器。然后,浏览器会根据需要解析发送给它的信息。

您需要修改您的 fetch.php 以使用您需要的数据生成一些格式正确的 JSON 字符串。它看起来像 { userid: 2837 } 。例如,尝试:

echo "{ userid: $user_id, username: $user_name }";

在您的成功回调中,jQuery 将传递给该函数的第一个参数将是解析(希望格式正确的)JSON 结果的结果,以便它成为一个正确的 JavaScript 对象。然后,在成功回调中,您可以通过以下方式使用结果:

//data will contain a JavaScript object that was generate from the JSON
//string the fetch.php produce, *iff* it generated a properly formatted
//JSON string.
function(data) {
$("#user_id_area").html(data.user_id);
}

按如下方式修改您的 HTML 示例:

User ID: <span id="user_id_area">&nbsp;</span>

其中 showHover 是一个实际显示悬停的辅助函数。

这是一个用于限制 mousemove 函数的模式:

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() {

var updatetimer = null;
$("#gdimage").mousemove( function( eventObj ) {
clearTimer(updatetimer);
setTimeout(function() { update_hover(eventObj.pageX, eventObj.pageY); }, 500);
}


var update_hover = function(pageX, pageY) {
var location = $("#gdimage").elementlocation();
var x = pageX - location.x;
var y = 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;

}

$("#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) {
//If you're using Chrome or Firefox+Firebug
//Uncomment the following line to get debugging info
//console.log("Name: "+data.username);
$("#user_name_area").html(data.username);
}
});

});

});

关于php - jQuery AJAX 调用 mousemove,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4854587/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com