JS实现类似CAD的获取点
JS通过async/await、Promise相结合的方式等待获取点。
async drawLine() { let sp = await this.getPoint({ msg: "指定第一个点:" }); let ep = await this.getPoint({ msg: "指定下一点:" }); var line = window.svg.shape.Line.prototype.createLine(sp.userPt, ep.userPt); if (line) { var layer = window.svg.diagramManager.getLayer("0"); layer.appendChild(line); } }
上面代码实现了画线的过程,用了两次await来获取起点和终点,其中createLine和getLayer函数,用到了本人的网页CAD框架,可以用其它方式替代。
那么getPoint怎么实现呢?
async getPoint(resolve) { resolve = resolve || {}; return new Promise((resolve, reject) => { this.promiseResolve = resolve }); }
这里用到了Promise,等待鼠标点击时处理resolve。
鼠标点击的事件
async onMouseDown(e) { return this.promiseResolve(e); }
这样就触发了resolve回调,实现了获取点。
注:这里没有对错误、异常等情况进行处理。