Google Maps V3标记数组按zIndex排序仅Firefox生效?Chrome/Safari存Bug?
解决Google Maps API标记数组跨浏览器排序问题
嘿,这个问题我之前也踩过坑!核心原因是你用布尔值作为sort()的返回值,但JavaScript数组的排序函数其实要求返回数字(负数、0、正数),不同浏览器对布尔值的处理逻辑不一致才导致了兼容性问题。
为什么原来的代码只在Firefox生效?
Firefox对sort()的比较函数返回布尔值做了兼容处理,会把true当成1、false当成0来解析,但Chrome和Safari严格遵循ECMAScript规范,布尔值的转换逻辑会让你的排序逻辑失效——当a.getZIndex()小于b.getZIndex()时返回true(即1),其他情况返回false(即0),这样排序算法无法正确判断元素的相对位置,自然得不到你想要的降序结果。
正确的排序写法
要实现按zIndex从大到小降序排序,你需要返回两个值的差值:
markers.sort(function(a, b) { // b减a实现降序,换成a减b就是升序 return b.getZIndex() - a.getZIndex(); });
如果你的项目支持ES6语法,用箭头函数会更简洁:
markers.sort((a, b) => b.getZIndex() - a.getZIndex());
这样写的话,所有主流浏览器(Chrome、Safari、Firefox)都会按照预期把标记数组按zIndex从大到小排序啦。
内容的提问来源于stack exchange,提问作者Borja
相关产品推荐
相关产品推荐

