mig*_*ain 5 javascript leaflet
要重现此问题,您可以访问http://leafletjs.com/并在javascript控制台中编写以下内容:
> map.getZoom()
15
> map.setZoom(10);map.setZoom(1);
Object
> map.getZoom()
10
Run Code Online (Sandbox Code Playgroud)
我期待最后的getZoom回归1.为什么会这样?问题可能与缩放动画有关.如果在动画结束之前调用setZoom,则会忽略它.
我正在将传单与emberjs集成,并希望通过外部更改允许缩放更改.如果用户快速更改缩放,则效果不是所需的.
L.Map.setZoom叫L.Map.setView那叫L.Map._animateZoomIfClose.如果map._animatingZoom为true,则任何缩放都将停止.map._animatingZoom像寻找缩放动画一样工作:
L.Map._animateZoomIfClose是否true停止缩放其他呼叫L.Map._animateZoom.trueat L.Map._animateZoom并开始css转换.false在L.Map._onZoomTransitionEndCSS的转变结束.为什么会这样?我认为因为很难打破css过渡工作.
因此,如果您将禁用任何css转换和转换,您的代码必须正常工作.您还可以添加自己的扩展名:如果map._animatingZoom === true然后将您的操作添加到数组,则在map._catchTransitionEnd调用时处理此操作并将操作从数组和进程转移:
if (L.DomUtil.TRANSITION) {
L.Map.addInitHook(function () {
L.DomEvent.on(this._mapPane, L.DomUtil.TRANSITION_END, function () {
var zoom = this._zoomActions.shift();
if (zoom !== undefined) {
this.setZoom(zoom);
}
}, this);
});
}
L.Map.include(!L.DomUtil.TRANSITION ? {} : {
_zoomActions: [],
queueZoom: function (zoom) {
if (map._animatingZoom) {
this._zoomActions.push(zoom);
} else {
this.setZoom(zoom);
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3514 次 |
| 最近记录: |