我正在使用JavaScript编写代码。有一个非常简单的HTML标记,其超级父标记被输入到创建股票代码的功能中。该函数基本上克隆.ticker-inner
多次(递归)并逐个追加,直到其父宽度等于或大于窗口宽度。
但是,如果我将这些函数从 SU 对象移动到窗口范围,它们可以正常工作,但是现在它会抛出最大的调用堆栈错误。
var SU = {
createTicker: function(tickerWrapper) {
var tickers = tickerWrapper.find('.tickers'),
child = tickers.find('.ticker-inner');
SU.buildTickerChildrenClones(tickers, child);
},
buildTickerChildrenClones: function(tickers, child) {
var tickerWidth = parseInt(tickers.outerWidth(), 10);
var windowWidth = jQuery(window).width();
if (tickerWidth + 35 <= windowWidth) {
child.clone().insertAfter(child);
SU.buildTickerChildrenClones(tickers, child);
}
}
}
我猜tickers
变量失去了它的引用。
答案 0 :(得分:0)
在buildTickerChildrenClones
方法中,您无法将outerWidth
设置为较小的值以创建退出条件
所以,在这一行
var tickerWidth = parseInt(tickers.outerWidth(), 10);
ticketWidth
始终会在每次buildTickerChildrenClones
来电中提供相同的值。
该函数基本上克隆了.ticker-inner多次 (递归地)并且一个接一个地追加到它的父亲之后 宽度等于或大于窗口宽度。
因此,您需要检查其父级outerWidth
outerwidth
。
var tickerWidth = parseInt(tickers.parent().outerWidth(), 10);
这应该有效,只要tickers
不是设计为将自己包装到下一行。