Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 根据调整大小后的宽度计算调整大小前的元素宽度_Jquery - Fatal编程技术网

Jquery 根据调整大小后的宽度计算调整大小前的元素宽度

Jquery 根据调整大小后的宽度计算调整大小前的元素宽度,jquery,Jquery,要设置元素的边距,我要计算它在浏览器调整大小之前和之后的大小差异。如何在resize函数外部访问resizeW变量,或者在resize函数内部使用startW而不改变它 例如:如果我得到的元素在调整大小之前的宽度是300像素,然后我触发调整大小。之后,元素为200像素。我想计算一下差额。300-200您的大小在函数内部定义。。。所以你有一个范围问题。。。请尝试以下操作: var startW = $('li').width(); // width before resize var resiz

要设置元素的边距,我要计算它在浏览器调整大小之前和之后的大小差异。如何在resize函数外部访问resizeW变量,或者在resize函数内部使用startW而不改变它



例如:如果我得到的元素在调整大小之前的宽度是300像素,然后我触发调整大小。之后,元素为200像素。我想计算一下差额。300-200

您的大小在函数内部定义。。。所以你有一个范围问题。。。请尝试以下操作:

var startW = $('li').width(); // width before resize
var resizeW = startW;
$(window).resize(function() {
    resizeW = $('li').width(); // width after resize
    var diff = (startW - resizeW); // startW and resizeW are the same
} );
$('li').css('margin-left',(startW - resizeW)); // resizeW is not defined

代码中的主要问题是,调整窗口大小时将调用resize,但您正在执行
$('li').css('margin-left',(startW-resizeW))在声明resize侦听器之后,因此即使将
var resizeW
放在外部,它也不会做任何事情


我认为在resize函数中,
startW
不应该与
resizeW
相同,因此必须有更多的东西。如果您想在每次调整窗口大小时更改左边距,只需将
$('li').css('margin-left',(diff))也在调整大小功能内。

在初始加载时,这将不起作用,因为
(startW-resizeW)
将产生
NaN
。要解决这个问题,您可以执行
var startW=resizeW=$(li).width()
。这似乎不起作用。StartW和currW总是一样的。@dcc这怎么可能?//你到底想在这里做什么?@dcc your'e试图使元素保持在相同的左侧位置,即使我们调整了窗口的大小?我想你问的是XY问题。你应该解释你想做什么以及为什么,因为你的问题太具体了,可能无法以最好的方式解决你的任务,虽然要实现总体思路,可能有比您现在所做的更好的解决方案。如果在调整大小之前,我得到的元素宽度为300像素,然后触发调整大小。后向元素为200像素。我想计算一下差额。300 - 200@dcc好的,这正是我在上面的评论中发布的演示链接中所看到的。演示的哪个部分不适合您?
var startW = $('li').width(); // width before resize
var resizeW = startW;
$(window).resize(function() {
    resizeW = $('li').width(); // width after resize
    var diff = (startW - resizeW); // startW and resizeW are the same
} );
$('li').css('margin-left',(startW - resizeW)); // resizeW is not defined
var $li = $('li'),         // Cache your element
    startW = $li.width();  // Store a variable reference

function setMarginDiff(){  // Create a function that modifies the margin
    var currW = $li.width(),
        diff = startW - currW ; 
    $li.css({marginLeft : diff}); 
}

setMarginDiff();                 // Do on DOM ready
$(window).resize(setMarginDiff); // and on resize