我正在努力将我的代码转换为纯JS,这真的很难。我需要一个函数来获取真正的滚动容器,而我使用.map()这样的滚动容器就是这样。



//get true container for scroll events
function getScrollContainer(c) {
	return $(c).map(function() {
		var cnt = this,
			isWin = !cnt.nodeName || $.inArray( cnt.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;
			if (!isWin) return cnt;

		var doc = (cnt.contentWindow || cnt).document || cnt.ownerDocument || cnt;

		return /webkit/i.test(navigator.userAgent) || doc.compatMode == 'BackCompat' ?
			doc.body :
			doc.documentElement;
    });
}
console.log(getScrollContainer(window));





有没有办法做到这一点?

最佳答案

Map只是一种“将这个功能应用于列表中的每个元素”的奇特方式,因此可以在for循环中轻松实现。

像这样的东西:(不是完美的或经过测试的,但应该给您一个想法)

    function getScrollContainer(c) {
        c = Object.prototype.toString.call( c ) === '[object Array] ? c : [c];
        for (var i = 0; i < c.length; i++) {
            var cnt = c[i],
                isWin = !cnt.nodeName || indexOf(cnt.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1;
                if (!isWin) return cnt;

            var doc = (cnt.contentWindow || cnt).document || cnt.ownerDocument || cnt;

            return /webkit/i.test(navigator.userAgent) || doc.compatMode == 'BackCompat' ?
                doc.body :
                doc.documentElement;
        }
    }

07-28 01:29
查看更多