function offsetFromPoint(event, element) { function a(width) { var l = 0, r = 200; while (r - l > 0.0001) { var mid = (r + l) / 2; var a = document.createElement('div'); a.style.cssText = 'position: absolute;left:0;top:0;background: red;z-index: 1000;'; a.style[width ? 'width' : 'height'] = mid.toFixed(3) + '%'; a.style[width ? 'height' : 'width'] = '100%'; element.appendChild(a); var x = document.elementFromPoint(event.clientX, event.clientY); element.removeChild(a); if (x === a) { r = mid; } else { if (r === 200) { return null; } l = mid; } } return mid; } var l = a(1), t = a(0); return l && t ? { left: l / 100, top: t / 100, toString: function () { return 'left: ' + l + '%, top: ' + t + '%'; } } : null; }