因为 image 的onload 是异步事件,所以这里需要将img缓存,然后图片加载后重新绘制下
- if (!ctx) {
- return;
- }
- var DOMURL = window.URL || window.webkitURL || window;
- var cell = context.sheet.getCell(context.row, context.col);
- var img = cell.tag();
- if (img) {
- ctx.save();
- ctx.rect(x, y, w, h);
- ctx.clip();
- ctx.drawImage(img, x + 2, y + 2)
- DOMURL.revokeObjectURL(url);
- ctx.restore();
- cell.tag(null);
- return;
- }
- var data = '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">' +
- '<foreignObject width="100%" height="100%">' +
- '<div xmlns="http://www.w3.org/1999/xhtml" style="font-size:40px">' +
- '<em>I</em> like' +
- '<span style="color:white; text-shadow:0 0 2px blue;">' +
- 'cheese</span>' +
- '</div>' +
- '</foreignObject>' +
- '</svg>';
- var img = new Image();
- var svg = new Blob([data], {type: 'image/svg+xml;charset=utf-8'});
- var url = DOMURL.createObjectURL(svg);
- cell.tag(img);
- img.onload = function () {
- context.sheet.repaint(new context.sheet.repaint(new GcSpread.Sheets.Rect(x, y, w, h));
- }
- img.src = url;
复制代码 |