只需要把要加载的js放到body标签结束之前就可以了,
这样body中的东西全加载好了,而且document也没有关闭,
就趁这个时候把东西写到document里,
尤其是百度地图API,导那个包就得这么导
<div id="allmap" style="width: 1000px;height: 618px" ></div>
<!--放在这里可以解决document.write在加载完成之后无法执行的问题-->
<!-- 百度地图核心js-->
<script type="text/javascript" src="http://api.map.baidu.com/api?v=3.0&ak=tCTdNSXmhpUzvDU1aXMZOqaYDL5rckvc" ></script>
<!-- 百度地图MAPV插件 -->
<script src="http://mapv.baidu.com/build/mapv.js"></script>
<script type="text/javascript">
// 百度地图API功能
var map = new BMap.Map("allmap", {
//禁用鼠标点击事件
enableMapClick: false
}); // 创建Map实例
// 左下角,添加比例尺
var top_left_control = new BMap.ScaleControl({anchor: BMAP_ANCHOR_BOTTOM_LEFT});
//左上角,添加默认缩放平移控件
var top_left_navigation = new BMap.NavigationControl();
map.addControl(top_left_control); // 测距离的
map.addControl(top_left_navigation); // 左导航默认
map.centerAndZoom(new BMap.Point(105.403119, 38.028658), 5); // 初始化地图,设置中心点坐标和地图级别
map.enableScrollWheelZoom(true); // 开启鼠标滚轮缩放
map.setMapStyle({
style: 'light'
});
var randomCount = 300;
var data = [];
var citys = ["北京","天津","上海","重庆","石家庄","太原","呼和浩特","哈尔滨","长春","沈阳","济南","南京","合肥","杭州","南昌","福州","郑州","武汉","长沙","广州","南宁","西安","银川","兰州","西宁","乌鲁木齐","成都","贵阳","昆明","拉萨","海口"];
// 构造数据
while (randomCount--) {
var cityCenter = mapv.utilCityCenter.getCenterByCityName(citys[parseInt(Math.random() * citys.length)]);
data.push({
geometry: {
type: 'Point',
coordinates: [cityCenter.lng - 2 + Math.random() * 4, cityCenter.lat - 2 + Math.random() * 4]
},
count: 30 * Math.random()
});
}
//创建点数据集
var dataSet = new mapv.DataSet(data);
var options = {
fillStyle: 'rgba(255, 50, 50, 0.6)',
shadowColor: 'rgba(255, 50, 50, 1)',//加上和去掉效果差不多
// shadowBlur: 30, //模糊效果
globalCompositeOperation: 'lighter',
methods: {
//每个点的点击事件
click: function (item) {
console.log(item);
}
},
size: 5,
draw: 'simple'
}
var mapvLayer = new mapv.baiduMapLayer(map, dataSet, options);
// dataSet.set(data); // 修改数据
// mapvLayer.show(); // 显示图层
// mapvLayer.hide(); // 删除图层
</script>
</body>
</html>
百度地图的js异步加载会出现这个错误,没关系,只要把它的加载放到head标签里,并且改成同步加载就行了。
有两个关键点:
由于document.write()必须在body标签结束之前执行,所以异步加载不能做到,而百度地图api就得用document.write(),这是根本矛盾。
所以,把百度地图的js放到head标签里,或者放到body标签结束之前,都是可以解决document.write()问题的。
并且,这个js的加载方式改为同步即可。
然而,百度地图API依然很坑,它会出现这个错误:
这个错误是不影响使用的,只是不太美观,只要把百度地图相关组件放入一个iframe再放到主页面中,主页面就不会输出这个错误了。