jdk-8u45 に含まれるJavaFX を使用WebView
して、OpenLayers 2.13.1 を使用してマップを表示する Web ページを開きます。を使用して地図を拡大しようとしてZoomBox
いBoxHandler
ます。ズームは正常に機能しますが、問題は長方形の描画方法です。
必要な結果は、マップをクリックしてドラッグを開始すると、マウスを動かすと長方形が描画を開始することです。これは、my 内を除いて、すべてのブラウザーで正常に機能しますWebView
。何が起こるかというと、マウスを x 方向と y 方向の両方 (たとえば対角線) に数 cm 移動した後でのみ、長方形がこの位置から描画を開始します (ドラッグを開始した位置ではありません)。さまざまなマウス イベントの座標を調べましたが、それらはすべて正しいように見えます。これは、実際にドラッグした領域 (たとえば、描画された領域ではない) にズームインするという事実によって確認されます。
JavaScript console.log
stmts は、マップをクリックした瞬間から座標を出力しますが、ドラッグの最初は何も描画されません。
誰かに同様の問題がありましたWebView
か?私が言ったように、コードは私が試した他のすべてのブラウザー (Safari、Firefox、Chrome、IE) で魅力的に機能します。私はインターネットを見回しましたが、私の問題に対する答えを見つけることができませんでした.
から取得したコードBoxHandler.js
:
startBox: function (xy) {
;;;console.log(xy);
;;;console.log("startbox xy=" + xy.x + "," + xy.y);
if(this.zoomBox){
this.removeBox();
}
this.zoomBox = OpenLayers.Util.createDiv('zoomBox',
this.dragHandler.start);
this.zoomBox.className = this.boxDivClassName;
this.zoomBox.style.zIndex = this.map.Z_INDEX_BASE["Popup"] - 1;
this.map.viewPortDiv.appendChild(this.zoomBox);
OpenLayers.Element.addClass(
this.map.viewPortDiv, "olDrawBox"
);
},
/**
* Method: moveBox
*/
moveBox: function (xy) {
var startX = this.dragHandler.start.x;
var startY = this.dragHandler.start.y;
;;;console.log("dragHandler.start.x=" + this.dragHandler.start.x);
;;;console.log("dragHandler.start.y=" + this.dragHandler.start.y);
var deltaX = Math.abs(startX - xy.x);
var deltaY = Math.abs(startY - xy.y);
this.zoomBox.style.width = Math.max(1, deltaX) + "px";
this.zoomBox.style.height = Math.max(1, deltaY) + "px";
this.zoomBox.style.left = xy.x < startX ? xy.x+"px" : startX+"px";
this.zoomBox.style.top = xy.y < startY ? xy.y+"px" : startY+"px";
console.log("zoombox width=" + this.zoomBox.style.width);
console.log("zoombox height=" + this.zoomBox.style.height);
console.log("zoombox left=" + this.zoomBox.style.left);
console.log("zoombox top=" + this.zoomBox.style.top);
// depending on the box model, modify width and height to take borders
// of the box into account
var box = this.getBoxCharacteristics();
;;;console.log("movebox xOffset=" + box.xOffset);
;;;console.log("movebox yOffset=" + box.yOffset);
if (box.newBoxModel) {
if (xy.x > startX) {
this.zoomBox.style.width =
Math.max(1, deltaX - box.xOffset) + "px";
}
if (xy.y > startY) {
this.zoomBox.style.height =
Math.max(1, deltaY - box.yOffset) + "px";
}
}
},
/**
* Method: endBox
*/
endBox: function(end) {
var result;
console.log(this.map.viewPortDiv.lastElementChild.style);
if (Math.abs(this.dragHandler.start.x - end.x) > 5 ||
Math.abs(this.dragHandler.start.y - end.y) > 5) {
var start = this.dragHandler.start;
var top = Math.min(start.y, end.y);
var bottom = Math.max(start.y, end.y);
var left = Math.min(start.x, end.x);
var right = Math.max(start.x, end.x);
result = new OpenLayers.Bounds(left, bottom, right, top);
} else {
result = this.dragHandler.start.clone(); // i.e. OL.Pixel
}
this.removeBox();
this.callback("done", [result]);
}
また、これが関連しているかどうかはわかりませんが、div
(Firebug Lite を使用して) マップを保持する HTML 要素を調べると、上の境界線が本来よりも下にあるように見えdiv
ます。マップ (Web ページの正しい位置) が上部の境界線を超えています。これは、私が言及した他のブラウザーとは異なる動作です。
どんな助けでも大歓迎です。