【发布时间】:2017-12-11 10:01:02
【问题描述】:
我有jquery 函数来控制具有动态屏幕大小的页面菜单元素。但是这段代码需要jquery lib's。但这会影响我的加载性能。
我不能为jquery 使用async 加载属性,因为这个函数需要这个库。但是,如果我可以更改为纯JavaScript,那么加载性能将会很高。 (渐进式 Web 应用程序)
但是当我真的为这种转换而苦苦挣扎时。有谁知道如何转换成纯JavaScript?
function calcWidth() {
var navwidth = 0;
var morewidth = $('#main .more').outerWidth(true);
$('#main > li:not(.more)').each(function() {
navwidth += $(this).outerWidth( true );
});
var availablespace = $('nav').outerWidth(true) - morewidth;
if (navwidth > availablespace) {
var lastItem = $('#main > li:not(.more)').last();
lastItem.attr('data-width', lastItem.outerWidth(true));
lastItem.prependTo($('#main .more ul'));
calcWidth();
} else {
var firstMoreElement = $('#main li.more li').first();
if (navwidth + firstMoreElement.data('width') < availablespace) {
firstMoreElement.insertBefore($('#main .more'));
}
}
if ($('.more li').length > 0) {
$('.more').css('display','inline-block');
} else {
$('.more').css('display','none');
}
}
$(window).on('resize load',function(){
calcWidth();
});
【问题讨论】:
-
把它分成小块。做研究。请记住,我们不是来为您翻译代码的。
-
任何选择器,而不仅仅是 id 选择器,您可以开始查看 querySelectorAll,然后在标准循环中循环匹配,而不是 jQuery
each之类的东西prependTo我会直接做谷歌,jQuery PrependTo in pure Javascript或查看免费提供的实际 jquery 源代码。 -
请记住,jQuery 使您的代码“跨浏览器兼容”。当您编写纯 JS 代码时,您可能会遇到旧的 Web 浏览器兼容性问题。
标签: javascript jquery html progressive-web-apps