奇怪的问题我猜,但我的页面中有这段代码...
$(".map-overlay-left").click(function () {
$("#map-holder").hide('slow');
var gmarkers = [];
var side_bar_html = "";
var map = new GMap2(document.getElementById('map-holder'));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
var Africa = new GLatLng(-2.767478,23.730469);
map.setCenter(Africa, 4);
$.get("http://xx.xxx.xxxx.xxx/xml-feed-google-maps",{},function(xml) {
$('marker',xml).each(function(i) {
html = $(this).text();
lat = $(this).attr("lat");
lng = $(this).attr("lng");
label = $(this).attr("label");
var point = new GLatLng(lat,lng);
var marker = createMarker(point,label,html);
map.addOverlay(marker);
});
});
$("#map-holder").show('slow');
});
这非常有效,并且在功能上做了我想要的UI而不是UI。这是为了首先做一个很好的过渡来隐藏div“地图持有者”,在里面渲染谷歌地图,然后做一个很好的过渡回到大小。转换是默认的JQuery show / hide。
现在我似乎得到的问题是,当这个$("#map-holder").hide('slow');
仍然在运行时正在渲染Google地图,你会看到它隐藏之前的地图,然后再次打开,这有点无视整个效果。
因此,任何人都知道如何减慢代码以等待隐藏功能完成其余部分之前? (理想情况下,我不想使用像setTimeout这样的硬编码的东西)。
提前致谢!
沙迪
更新1
我已经回拨了隐藏功能,但它对GMap产生了非常奇怪的影响。在Chrome / FF / Safari中,它只会在地图出现时在地图的一角呈现一小段。在IE中,它完全被抛弃,并以不同的位置为中心。 GMap似乎不喜欢被隐藏的div渲染。
你可以在这里看到它http://afid.staging.dante-studios.com/它在前面(只需按下亚洲或非洲的播放按钮即可看到奇怪的效果)。
有关如何解决此问题的任何想法?
更新2 尝试使用以下方法修复无法在隐藏div中正确呈现的Google地图问题:
$(".map-overlay-left").click(function () {
$("#map-holder").hide('slow', function(){
var gmarkers = [];
var side_bar_html = "";
var map = new GMap2(document.getElementById('map-holder'));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
var Africa = new GLatLng(-2.767478,23.730469);
map.setCenter(Africa, 4);
$.get("http://afid.staging.dante-studios.com/xml-feed-google-maps",{},function(xml) {
$('marker',xml).each(function(i) {
html = $(this).text();
lat = $(this).attr("lat");
lng = $(this).attr("lng");
label = $(this).attr("label");
var point = new GLatLng(lat,lng);
var marker = createMarker(point,label,html);
map.addOverlay(marker);
});
});
});
$("#map-holder").show('slow');
map.checkResize();
map.setCenter(Africa, 4);
});
但是map.checkResize();
方法没有运气。有什么想法吗?
答案 0 :(得分:4)
动画完成后,使用callback to .hide
执行您的工作:
$("#map-holder").hide('slow', function() {
var gmarkers = [];
var side_bar_html = "";
// ...
$("#map-holder").show('slow');
})
答案 1 :(得分:1)
你需要在hide函数中添加一个回调函数,该函数在隐藏它时会运行:
$(".map-overlay-left").click(function () {
$("#map-holder").hide('slow', function(){
var gmarkers = [];
var side_bar_html = "";
var map = new GMap2(document.getElementById('map-holder'));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
var Africa = new GLatLng(-2.767478,23.730469);
map.setCenter(Africa, 4);
$.get("http://afid.staging.dante-studios.com/xml-feed-google-maps",{},function(xml) {
$('marker',xml).each(function(i) {
html = $(this).text();
lat = $(this).attr("lat");
lng = $(this).attr("lng");
label = $(this).attr("label");
var point = new GLatLng(lat,lng);
var marker = createMarker(point,label,html);
map.addOverlay(marker);
//alert(lat + " " + lng + " " + label);
});
});
$("#map-holder").show('slow');
});
});
答案 2 :(得分:0)
如果你正在寻找香草JS,请尝试this如果你回答。
转换列表器事件在每个浏览器中都有所不同,因此下面的函数将找到要使用的侦听器并返回正确的侦听器。
function whichTransitionEvent(){
var t;
var el = document.createElement('fakeelement');
var transitions = {
'transition':'transitionend',
'OTransition':'oTransitionEnd',
'MozTransition':'transitionend',
'WebkitTransition':'webkitTransitionEnd'
}
for(t in transitions){
if( el.style[t] !== undefined ){
return transitions[t];
}
}
}
var transitionEnd = whichTransitionEvent();
element.addEventListener(transitionEnd, theFunctionToInvoke, false);
function theFunctionToInvoke(){
// set margin of div here
}