diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:40:17 -0500 |
commit | 33058f2b292b3a581333bdfb21b8f671898c5060 (patch) | |
tree | 51c3e392513ec574331b2d3f85c394445ea803c6 /files/zh-cn/web/api/window/devicepixelratio | |
parent | 8b66d724f7caf0157093fb09cfec8fbd0c6ad50a (diff) | |
download | translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.gz translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.tar.bz2 translated-content-33058f2b292b3a581333bdfb21b8f671898c5060.zip |
initial commit
Diffstat (limited to 'files/zh-cn/web/api/window/devicepixelratio')
-rw-r--r-- | files/zh-cn/web/api/window/devicepixelratio/index.html | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/files/zh-cn/web/api/window/devicepixelratio/index.html b/files/zh-cn/web/api/window/devicepixelratio/index.html new file mode 100644 index 0000000000..a5976667d9 --- /dev/null +++ b/files/zh-cn/web/api/window/devicepixelratio/index.html @@ -0,0 +1,179 @@ +--- +title: Window.devicePixelRatio +slug: Web/API/Window/devicePixelRatio +translation_of: Web/API/Window/devicePixelRatio +--- +<p>{{APIRef}}</p> + +<p>{{domxref("Window")}} 接口的<code><strong>devicePixelRatio</strong></code>返回当前显示设备的<em>物理像素</em>分辨率与<em>CSS像素</em>分辨率之比。 此值也可以解释为像素大小的比率:一个CSS像素的大小与一个物理像素的大小。 简单来说,它告诉浏览器应使用多少屏幕实际像素来绘制单个CSS像素。</p> + +<p>当处理标准显示器与HiDPI或Retina显示器之间的差异时,这很有用,后者使用更多的屏幕像素绘制相同的对象,从而获得更清晰的图像。</p> + +<p>您可以使用{{domxref("Window.matchMedia", "window.matchMedia()")}} 检查<code>devicePixelRatio</code>的值是否发生更改(例如,如果用户将窗口拖动到带有 不同的像素密度)。 请参阅{{anch("Monitoring screen resolution or zoom level changes", "下面的例子")}}.。</p> + +<h2 id="Summary" name="Summary">语法</h2> + +<pre class="syntaxbox"><em><var>value</var></em> = window.devicePixelRatio; +</pre> + +<h3 id="值Value">值Value</h3> + +<p>一个双精度浮点值,指示显示器的物理像素分辨率与CSS像素分辨率之比。 值1表示经典96 DPI(在某些平台上为76 DPI)显示,而对于HiDPI / Retina显示屏则期望值为2。 在异常低分辨率的显示器中,或更常见的是,当屏幕的像素深度比简单地将96或76 DPI的标准分辨率提高一倍时,可能还会返回其他值。</p> + +<h2 id="例子">例子</h2> + +<h3 id="在_<canvas>_中更正分辨率">在 <code><canvas></code> 中更正分辨率</h3> + +<p>{{htmlelement("canvas")}}可能在视网膜屏幕上显得太模糊。 使用<code>window.devicePixelRatio</code>确定应添加多少额外的像素密度以使图像更清晰。</p> + +<h4 id="HTML">HTML</h4> + +<pre><canvas id="canvas"></canvas></pre> + +<h4 id="JavaScript">JavaScript</h4> + +<pre>var canvas = document.getElementById('canvas'); +var ctx = canvas.getContext('2d'); + +// Set display size (css pixels). +var size = 200; +canvas.style.width = size + "px"; +canvas.style.height = size + "px"; + +// Set actual size in memory (scaled to account for extra pixel density). +var scale = window.devicePixelRatio; // Change to 1 on retina screens to see blurry canvas. +canvas.width = Math.floor(size * scale); +canvas.height = Math.floor(size * scale); + +// Normalize coordinate system to use css pixels. +ctx.scale(scale, scale); + +ctx.fillStyle = "#bada55"; +ctx.fillRect(10, 10, 300, 300); +ctx.fillStyle = "#ffffff"; +ctx.font = '18px Arial'; +ctx.textAlign = 'center'; +ctx.textBaseline = 'middle'; + +var x = size / 2; +var y = size / 2; + +var textString = "I love MDN"; +ctx.fillText(textString, x, y);</pre> + +<h2 id="sect1"><img alt="This image describe the impact of different value on retina display. " src="https://mdn.mozillademos.org/files/15023/devicePixelRation%20Diff..png"></h2> + +<h3 id="监视屏幕分辨率或缩放级别的更改">监视屏幕分辨率或缩放级别的更改</h3> + +<p>在此示例中,我们将设置一个媒体查询并观看它以查看设备分辨率何时更改,以便我们可以检查<code>devicePixelRatio</code>的值来处理所需的任何更新。</p> + +<h4 id="JavaScript_2">JavaScript</h4> + +<p>JavaScript代码创建媒体查询,以监控设备分辨率并在每次更改时检查<code>devicePixelRatio</code>的值。</p> + +<pre>let pixelRatioBox = document.querySelector(".pixel-ratio"); +let mqString = `(resolution: ${window.devicePixelRatio}dppx)`; + +const updatePixelRatio = () => { + let pr = window.devicePixelRatio; + let prString = (pr * 100).toFixed(0); + pixelRatioBox.innerText = `${prString}% (${pr.toFixed(2)})`; +} + +updatePixelRatio(); + +matchMedia(mqString).addListener(updatePixelRatio); +</pre> + +<p>字符串<code>mqString</code>设置为媒体查询本身。 媒体查询以<code>(resolution: 1dppx)</code>(对于标准显示)或<code>(resolution: 2dppx)</code>(对于Retina / HiDPI显示)开始,检查当前显示分辨率是否与每个像素<code>px</code>的实际设备像素点匹配。</p> + +<p><code>updatePixelRatio()</code>函数获取<code>devicePixelRatio</code>的当前值,然后将<code>pixelRatioBox</code>的 {{domxref("HTMLElement.innerText", "innerText")}}设置为一个字符串,该字符串同时显示百分比和原始十进制值比率,最多两位小数。</p> + +<p>然后,调用<code>updatePixelRatio()</code>函数一次以显示起始值,然后使用{{domxref("Window.matchMedia", "matchMedia()")}} 和 {{domxref("EventTarget.addEventListener", "addEventListener()")}}来将<code>updatePixelRatio()</code>设置为<code>change</code>事件的处理程序。</p> + +<h4 id="HTML_2">HTML</h4> + +<p>HTML将创建包含说明的框和将显示当前像素比率信息的<code>pixel-ratio</code> 框。</p> + +<pre><div class="container"> + <div class="inner-container"> + <p>This example demonstrates the effect of zooming the page in + and out (or moving it to a screen with a different scaling + factor) on the value of the property <code>Window.devicePixelRatio</code>. + Try it and watch what happens!</p> + </div> + <div class="pixel-ratio"></div> +</div></pre> + +<details><summary> +<h4 id="CSS">CSS</h4> +</summary> + +<pre>body { + font: 22px arial, sans-serif; +} + +.container { + top: 2em; + width: 22em; + height: 14em; + border: 2px solid #22d; + margin: 0 auto; + padding: 0; + background-color: #a9f; +} + +.inner-container { + padding: 1em 2em; + text-align: justify; + text-justify: auto; +} + +.pixel-ratio { + position: relative; + margin: auto; + height: 1.2em; + text-align: right; + bottom: 0; + right: 1em; + font-weight: bold; +}</pre> +</details> + +<h4 id="Result">Result</h4> + +<p>{{EmbedLiveSample("Monitoring_screen_resolution_or_zoom_level_changes", "100%", 500)}}</p> + +<h2 id="规范">规范</h2> + +<table> + <thead> + <tr> + <th scope="col">Specification</th> + <th scope="col">Status</th> + <th scope="col">Comment</th> + </tr> + </thead> + <tbody> + <tr> + <td>{{SpecName("CSSOM View", "#dom-window-devicepixelratio", "Window.devicePixelRatio")}}</td> + <td>{{Spec2("CSSOM View")}}</td> + <td>Initial definition</td> + </tr> + </tbody> +</table> + +<h2 id="Browser_compatibility" name="Browser_compatibility">浏览器兼容性</h2> + +<p>The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p> + +<p>{{Compat("api.Window.devicePixelRatio")}}</p> + +<h2 id="参见">参见</h2> + +<ul> + <li><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries">Media queries</a></li> + <li><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries">Using media queries</a></li> + <li><a href="https://wiki.developer.mozilla.org/en-US/docs/Web/CSS/@media/resolution">CSS <code>resolution</code> media query</a></li> + <li></li> +</ul> |