我有一个图像尺寸计算功能,它在执行时返回缩放图像尺寸值。 (注意:从阵列中访问图像列表及其尺寸。)
function setDesiredDimensions() {
var width = Math.min(imagesOrigWidths[currindex], desiredWidthLimit);
var height = Math.ceil((width / imagesOrigWidths[currindex]) * imagesOrigHeights[currindex]);
some more calculation code here...
return {width:width,height:height};
}
var size = setDesiredDimensions(imagesOrigWidths[currindex], imagesOrigHeights[currindex]);
然后我在HTML中有一些按钮:
<a id="button1"></a>
<a id="button2"></a>
<a id="button3"></a>
这些按钮上的各种onclick事件,例如:
$('#button1').click( function() {
currindex = (currindex+1) % max;
**I need to evaluate setDesiredDimensions function here **
$("#imageswap").attr({src: imgSrcBase(imagesGuids[currindex]), width: size.width, height: size.height})
});
按钮调整数组中的当前图像索引,我需要应用维度计算。但是:我不希望在所有按钮单击功能中复制和粘贴相同的setDesiredDimensions函数,而只是访问/评估它作为更干净代码的快捷方式。
我听到了eval();是危险和缓慢的。有什么想法吗?
答案 0 :(得分:1)
如果您在所有事件处理程序都可访问的范围中定义了setDesiredDimensions
,则只需调用该函数即可。这就是功能的用途。
我认为你的问题是该函数正在使用全局变量而不是传递给它的参数。在您的示例中,您将imagesOrigWidths[currindex]
作为参数传递,但也访问函数内部的imagesOrigWidths[currindex]
,这是没有意义的。
重新定义它,以便您可以简单地传递它需要的参数,例如
function setDesiredDimensions(orig_width, orig_height, limit) {
var width = Math.min(orig_width, limit);
var height = Math.ceil((width / orig_height) * orig_height);
// some more calculation code here...
return {width:width,height:height};
}