aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/events/mozafterpaint/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'files/zh-cn/web/events/mozafterpaint/index.html')
-rw-r--r--files/zh-cn/web/events/mozafterpaint/index.html179
1 files changed, 0 insertions, 179 deletions
diff --git a/files/zh-cn/web/events/mozafterpaint/index.html b/files/zh-cn/web/events/mozafterpaint/index.html
deleted file mode 100644
index fc3b766b45..0000000000
--- a/files/zh-cn/web/events/mozafterpaint/index.html
+++ /dev/null
@@ -1,179 +0,0 @@
----
-title: MozAfterPaint
-slug: Web/Events/MozAfterPaint
-translation_of: Archive/Add-ons/Events/MozAfterPaint
----
-<p><code>MozAfterPaint事件在页面呈现给用户屏幕时触发,并提供页面重绘的信息,主要应用于页面优化审查。</code></p>
-
-<p><code>注意</code>MozAfterPaint并非在页面重绘时立即触发,而是在重绘并合成后发生。这意味着有部分内容触发时已经呈现给客户。</p>
-
-<div class="note"><strong>Note:</strong>
-
-<ul>
- <li>This event is available to add-ons but since Firefox 4 it is <strong>not</strong> available to web pages by default. It can only be made available to web pages by setting the preference <code>dom.send_after_paint_to_content</code> to <code>true</code>. (源于<strong> </strong><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=539356"><strong>Bug 539356</strong></a>, 这个属性设置为<code>true</code>, 所有的<code>MozAfterPaint</code> 时间都被发动到web页面. 更多信息请查看 <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=829330"><strong>Bug 829330</strong></a>)</li>
- <li>Web pages that want to take an action after a repaint of the page can use <a href="/en-US/docs/Web/API/window/requestAnimationFrame">requestAnimationFrame</a> with a callback that sets a timeout of zero to then call the code that takes the desired post-repaint action.</li>
- <li>If the handler for this event does anything that triggers repainting (such as changing the style of an element), an infinite loop will probably be triggered.</li>
- <li>Repainting of areas scrolled outside the viewport is reported, but repainting of areas scrolled outside <code>overflow:auto</code> elements and the like is not.</li>
- <li>Repainting in windowed plug-ins (which is most plug-ins on Windows and GTK) is not reported.</li>
-</ul>
-</div>
-
-<h2 id="General_info">General info</h2>
-
-<dl>
- <dt style="float: left; text-align: right; width: 120px;">Specification</dt>
- <dd style="margin: 0 0 0 120px;"><em>Add-ons specific</em></dd>
- <dt style="float: left; text-align: right; width: 120px;">Interface</dt>
- <dd style="margin: 0 0 0 120px;">Event</dd>
- <dt style="float: left; text-align: right; width: 120px;">Bubbles</dt>
- <dd style="margin: 0 0 0 120px;">Yes</dd>
- <dt style="float: left; text-align: right; width: 120px;">Cancelable</dt>
- <dd style="margin: 0 0 0 120px;">Yes</dd>
- <dt style="float: left; text-align: right; width: 120px;">Target</dt>
- <dd style="margin: 0 0 0 120px;">window</dd>
- <dt style="float: left; text-align: right; width: 120px;">Default Action</dt>
- <dd style="margin: 0 0 0 120px;">None</dd>
-</dl>
-
-<h2 id="Properties">Properties</h2>
-
-<table class="standard-table">
- <thead>
- <tr>
- <th scope="col">Property</th>
- <th scope="col">Type</th>
- <th scope="col">Description</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td><code>target</code> {{readonlyInline}}</td>
- <td>{{domxref("EventTarget")}}</td>
- <td>The event target (the topmost target in the DOM tree).</td>
- </tr>
- <tr>
- <td><code>type</code> {{readonlyInline}}</td>
- <td>{{domxref("DOMString")}}</td>
- <td>The type of event.</td>
- </tr>
- <tr>
- <td><code>bubbles</code> {{readonlyInline}}</td>
- <td><code>boolean</code></td>
- <td>Does the event normally bubble?</td>
- </tr>
- <tr>
- <td><code>cancelable</code> {{readonlyInline}}</td>
- <td><code>boolean</code></td>
- <td>Is it possible to cancel the event?</td>
- </tr>
- <tr>
- <td><code>boundingClientRect</code></td>
- <td>clientRect</td>
- <td>The equivalent of {{domxref("Element.getBoundingClientRect", "getBoundingClientRect()")}} for the repainted zone. Read only.</td>
- </tr>
- <tr>
- <td><code>clientRects</code></td>
- <td>clientRectList</td>
- <td>The equivalent of {{domxref("Element.getClientRects", "getClientRects()")}}  for the repainted zone. Read only.</td>
- </tr>
- <tr>
- <td><code>transactionId</code></td>
- <td><code>uint64_t</code></td>
- <td>The transaction id of the composition that just occurred to present something to the user. Read only.</td>
- </tr>
- </tbody>
-</table>
-
-<h2 id="Example">Example</h2>
-
-<p>This example highlights elements that get repainted while hovering the document with a cursor.</p>
-
-<pre class="brush: js">(function(){
- var store = [];
-
- // every repaint will be logged in store
- window.addEventListener("MozAfterPaint", log, false);
-
- if ( document.body )
- bind();
- else
- window.addEventListener("load", bind, false);
-
- function log(e){
- store.push( [(new Date).getTime(), e.clientRects] );
- }
-
- function bind(){
- // clicking anywhere on the document will prevent other repaint to be logged
- // as well as display the visual "repaint heatmap"
- document.body.addEventListener("click", function onClick(){
- window.removeEventListener("MozAfterPaint", log, false);
-
- for ( var pos = 0; pos &lt; store.length; pos++ ) {
- var rects = store[pos][1];
-
- for ( var i = 0; i &lt; rects.length; i++ ) {
- // will simply "draw" semi-transparent red divs where
- // repaints where recorded
- var rect = rects[i];
- var div = document.createElement("div");
-
- with (div.style) {
- background = "red";
- opacity = "0.1";
- position = "absolute";
- top = rect.top + "px";
- left = rect.left + "px";
- width = (rect.right - rect.left) + "px";
- height = (rect.bottom - rect.top) + "px";
- }
-
- document.body.appendChild( div );
- }
- }
-
- document.body.removeEventListener("click", onClick, false);
- }, false);
- }
-})();
-</pre>
-
-<p>This example is for measuring how long something took to paint to the user.</p>
-
-<pre class="brush: js">// Suppose we want to measure how long it takes to paint the
-// next frame after a click event is fired on element "target".
-
-let winUtils = window.QueryInterface(Ci.nsIInterfaceRequestor)
-                   .getInterface(Ci.nsIDOMWindowUtils);
-
-// The last transaction id is the last id that was sent to the
-// compositor before our script started to execute.
-let lastTransactionId = winUtils.lastTransactionId;
-let start = window.performance.now();
-
-// Set up our MozAfterPaint listener, but we only care about
-// MozAfterPaint events where the transaction id is GREATER
-// than lastTransactionId. This is to account for the possibility
-// that a composite is underway at the time this script is running.
-addEventListener("MozAfterPaint", function onPaint(event) {
- if (event.transactionId &gt; lastTransactionId) {
- // Since the transaction id is greater than the last transaction
- // id, that means we're safe to assume that whatever effect that
- // clicking on the "target" element was supposed to have, if the
- // change should have been instantaneous, then it has been presented
- // to the user.
- let finish = window.performance.now();
- alert(`Time to present: ${finish - start}ms`);
- removeEventListener("MozAfterPaint", onPaint);
- }
-});
-
-document.getElementById("target").click();
-
-</pre>
-
-<h2 id="See_also">See also</h2>
-
-<ul>
- <li><a href="/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDOMWindowUtils#isMozAfterPaintPendingen-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDOMWindowUtils#isMozAfterPaintPending">nsIDOMWindowUtils.isMozAfterPaintPending</a></li>
-</ul>