我正在编写一个扩展折线功能的Leaflet插件.在我的插件中,我使用SVGPathSegList接口访问路径段.但根据Chrome DevTools,该界面将在Chrome 48中删除.我正在寻找另一种访问路径段的可能性.
这是我的小提琴.
(function () { var __onAdd = L.Polyline.prototype.onAdd, __onRemove = L.Polyline.prototype.onRemove, __updatePath = L.Polyline.prototype._updatePath, __bringToFront = L.Polyline.prototype.bringToFront; L.Polyline.include({ onAdd: function (map) { __onAdd.call(this, map); this._textRedraw(); }, onRemove: function (map) { __onRemove.call(this, map); }, bringToFront: function () { __bringToFront.call(this); this._textRedraw(); }, _textRedraw: function () { var textNodes = this._path.parentElement.getElementsByTagName('text'), tnIndex; if (textNodes.length > 0) { for (tnIndex = textNodes.length - 1; tnIndex >= 0; tnIndex -= 1) { textNodes[tnIndex].parentNode.removeChild(textNodes[tnIndex]); } } if (this.options.measurements) { this.setText(); } }, setText: function () { var path = this._path, points = this.getLatLngs(), pathSeg, prevPathSeg, center, angle, rotation, textNode; /* * If not in SVG mode or Polyline not added to map yet return * setText will be called by onAdd, using value stored in this._text */ if (!L.Browser.svg || typeof this._map === 'undefined') { return this; } for (pathSeg = 0; pathSeg < path.pathSegList.length; pathSeg += 1) { if (pathSeg > 0) { prevPathSeg = path.pathSegList[pathSeg - 1]; center = this._calcCenter( prevPathSeg.x, prevPathSeg.y, path.pathSegList[pathSeg].x, path.pathSegList[pathSeg].y ); angle = this._calcAngle( prevPathSeg.x, prevPathSeg.y, path.pathSegList[pathSeg].x, path.pathSegList[pathSeg].y ); rotation = 'rotate(' + angle + ' ' + center.x + ',' + center.y + ')'; debugger; textNode = document .createElementNS('http://www.w3.org/2000/svg', 'text'); textNode.setAttribute('text-anchor', 'middle'); textNode.setAttribute('x', center.x); textNode.setAttribute('y', center.y); textNode.setAttribute('transform', rotation); textNode.textContent = points[pathSeg - 1] .distanceTo(points[pathSeg]); this._path.parentElement.appendChild(textNode); } else { continue; } } }, _calcCenter: function (x1, y1, x2, y2) { return { x: (x1 + x2) / 2, y: (y1 + y2) / 2 } }, _calcAngle: function (x1, y1, x2, y2) { return Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI; }, _updatePath: function () { __updatePath.call(this); this._textRedraw(); } }); })();
cuixiping.. 16
@ holger-会给出一些非常有用的链接.
您可以修改js代码以使用新API.
例如:
使用var pathData = path.getPathData()
而不是旧var segs = path.pathSegList
;
使用pathData[1].values[4]
而不是旧path.pathSegList.getItem(1).x
使用path.setPathData(pathData)
来更新路径元素而不是旧元素path.pathSegList.appendItem/insertItem/removeItem
对于不支持新API的浏览器,请包含path-data-polyfill.js.
(Chrome 50仍然没有实现getPathData
和setPathData
.可能还有很长的路要走......)
这是一个代码示例:
//svg code:
//...
//
//
//...
//js code:
var path = document.getElementById('mypath');
var pathdata = path.getPathData();
console.log(pathdata);
console.log(pathdata.length); //2
console.log(pathdata[0].type); //"M"
console.log(pathdata[0].values); //[0,0]
console.log(pathdata[1].type); //"L"
console.log(pathdata[1].values); //[100,50]
pathdata.push({type: "C", values: [100,-50,200,150,200,50]}); //add path segment
path.setPathData(pathdata); //set new path data
console.log(path.getAttribute('d')); //"M0,0 L100,50 C100,-50,200,150,200,50"
路径数据polyfill:https://github.com/jarek-foksa/path-data-polyfill
@ holger-会给出一些非常有用的链接.
您可以修改js代码以使用新API.
例如:
使用var pathData = path.getPathData()
而不是旧var segs = path.pathSegList
;
使用pathData[1].values[4]
而不是旧path.pathSegList.getItem(1).x
使用path.setPathData(pathData)
来更新路径元素而不是旧元素path.pathSegList.appendItem/insertItem/removeItem
对于不支持新API的浏览器,请包含path-data-polyfill.js.
(Chrome 50仍然没有实现getPathData
和setPathData
.可能还有很长的路要走......)
这是一个代码示例:
//svg code:
//...
//
//
//...
//js code:
var path = document.getElementById('mypath');
var pathdata = path.getPathData();
console.log(pathdata);
console.log(pathdata.length); //2
console.log(pathdata[0].type); //"M"
console.log(pathdata[0].values); //[0,0]
console.log(pathdata[1].type); //"L"
console.log(pathdata[1].values); //[100,50]
pathdata.push({type: "C", values: [100,-50,200,150,200,50]}); //add path segment
path.setPathData(pathdata); //set new path data
console.log(path.getAttribute('d')); //"M0,0 L100,50 C100,-50,200,150,200,50"
路径数据polyfill:https://github.com/jarek-foksa/path-data-polyfill