这一年因为工作需要,封装了不少js控件,有的简单,有的异常复杂,中间少不了大大小小各种问题和困难。
其中一个问题就是标题问题,今天终于整明白了,现在贴出来,以备参考。
首先,问题棘手的地方在于,计算是否显示滑条时,横向滑条占用了纵向高度,纵向滑条占用了横向高度,
意味着计算纵向滑条,要纳入横向滑条的高度,计算横向滑条要纳入纵向滑条高度。
这就麻烦了,貌似成了无限嵌套循环。。。。。
我就是在这点上纠结了很久,不得不采用各种方法,试图规避循环计算。
然而,在尝试了n次后,发现除了拆分容器为复合容器,否则无法解决这个问题后,终于又回到起点,不得不正视这个'循环'问题。
经过反复思考和推演,结果发现,自己从一开始就走入了一个误区,认为无限循环这个想法是错误的!!!!
循环是需要的,但只要循环一次,即计算两次就行了。。。。
var hs = c.lineHeight * this.list.length, hh = c.isDropDownList ? 0 : c.headHeight, yr = (hs + hh) < (c.maxHeight - 2) ? 0 : 17, xr = (this.lineWidth + yr) < (c.maxWidth - 2) ? 0 : 17, yr = (hs + hh + xr) < (c.maxHeight - 2) ? 0 : 17, xr = (this.lineWidth + yr) < (c.maxWidth - 2) ? 0 : 17, w = (this.lineWidth + yr) < (c.maxWidth - 2) ? (this.lineWidth + yr) : (c.maxWidth - yr - 2), h = (hs + hh + xr) < (c.maxHeight - 2) ? (hs + xr) : (c.maxHeight - xr - 2); this.contentDom.css({ w, height: h }); this.frameDom.css({ this.contentDom.outerWidth(), height: this.contentDom.outerHeight() + hh });
现在把关键代码贴出来,以资记忆,不枉我死掉的n多脑细胞。。。。。