mirror of https://github.com/sveltejs/svelte
parent
0c6de32217
commit
44ef530c14
@ -0,0 +1,20 @@
|
|||||||
|
<script>
|
||||||
|
let w;
|
||||||
|
let h;
|
||||||
|
let size = 42;
|
||||||
|
let text = 'edit me';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
input { display: block; }
|
||||||
|
div { display: inline-block; }
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<input type=range bind:value={size}>
|
||||||
|
<input bind:value={text}>
|
||||||
|
|
||||||
|
<p>size: {w}px x {h}px</p>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<span style="font-size: {size}px">{text}</span>
|
||||||
|
</div>
|
@ -0,0 +1,20 @@
|
|||||||
|
<script>
|
||||||
|
let w;
|
||||||
|
let h;
|
||||||
|
let size = 42;
|
||||||
|
let text = 'edit me';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
input { display: block; }
|
||||||
|
div { display: inline-block; }
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<input type=range bind:value={size}>
|
||||||
|
<input bind:value={text}>
|
||||||
|
|
||||||
|
<p>size: {w}px x {h}px</p>
|
||||||
|
|
||||||
|
<div bind:clientWidth={w} bind:clientHeight={h}>
|
||||||
|
<span style="font-size: {size}px">{text}</span>
|
||||||
|
</div>
|
@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
title: Dimensions
|
||||||
|
---
|
||||||
|
|
||||||
|
Every block-level element has `clientWidth`, `clientHeight`, `offsetWidth` and `offsetHeight` bindings:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<div bind:clientWidth={w} bind:clientHeight={h}>
|
||||||
|
<span style="font-size: {size}px">{text}</span>
|
||||||
|
</div>
|
||||||
|
```
|
||||||
|
|
||||||
|
These bindings are readonly — changing the values of `w` and `h` won't have any effect.
|
||||||
|
|
||||||
|
> Elements are measured using a technique similar to [this one](http://www.backalleycoder.com/2013/03/18/cross-browser-event-based-element-resize-detection/). There is some overhead involved, so it's not recommended to use this for large numbers of elements.
|
||||||
|
>
|
||||||
|
> `display: inline` elements cannot be measured with this approach; nor can elements that can't contain other elements (such as `<canvas>`). In these cases you will need to measure a wrapper element instead.
|
@ -0,0 +1,58 @@
|
|||||||
|
<script>
|
||||||
|
import { onMount } from 'svelte';
|
||||||
|
|
||||||
|
let canvas;
|
||||||
|
let ctx;
|
||||||
|
let running = false;
|
||||||
|
|
||||||
|
const r = Math.random();
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
const ctx = canvas.getContext('2d');
|
||||||
|
let frame;
|
||||||
|
|
||||||
|
(function loop() {
|
||||||
|
frame = requestAnimationFrame(loop);
|
||||||
|
|
||||||
|
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
||||||
|
|
||||||
|
for (let p = 0; p < imageData.data.length; p += 4) {
|
||||||
|
const i = p / 4;
|
||||||
|
const x = i % canvas.width;
|
||||||
|
const y = i / canvas.height >>> 0;
|
||||||
|
|
||||||
|
const t = window.performance.now();
|
||||||
|
|
||||||
|
const r = 64 + (128 * x / canvas.width) + (64 * Math.sin(t / 1000));
|
||||||
|
const g = 64 + (128 * y / canvas.height) + (64 * Math.cos(t / 1000));
|
||||||
|
const b = 128;
|
||||||
|
|
||||||
|
imageData.data[p + 0] = r;
|
||||||
|
imageData.data[p + 1] = g;
|
||||||
|
imageData.data[p + 2] = b;
|
||||||
|
imageData.data[p + 3] = 255;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.putImageData(imageData, 0, 0);
|
||||||
|
}());
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
cancelAnimationFrame(frame);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
canvas {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: #eee;
|
||||||
|
-webkit-mask: url(logo-mask.svg) 50% 50% no-repeat;
|
||||||
|
mask: url(logo-mask.svg) 50% 50% no-repeat;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<canvas
|
||||||
|
width={32}
|
||||||
|
height={32}
|
||||||
|
></canvas>
|
@ -0,0 +1,59 @@
|
|||||||
|
<script>
|
||||||
|
import { onMount } from 'svelte';
|
||||||
|
|
||||||
|
let canvas;
|
||||||
|
let ctx;
|
||||||
|
let running = false;
|
||||||
|
|
||||||
|
const r = Math.random();
|
||||||
|
|
||||||
|
onMount(() => {
|
||||||
|
const ctx = canvas.getContext('2d');
|
||||||
|
let frame;
|
||||||
|
|
||||||
|
(function loop() {
|
||||||
|
frame = requestAnimationFrame(loop);
|
||||||
|
|
||||||
|
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
||||||
|
|
||||||
|
for (let p = 0; p < imageData.data.length; p += 4) {
|
||||||
|
const i = p / 4;
|
||||||
|
const x = i % canvas.width;
|
||||||
|
const y = i / canvas.height >>> 0;
|
||||||
|
|
||||||
|
const t = window.performance.now();
|
||||||
|
|
||||||
|
const r = 64 + (128 * x / canvas.width) + (64 * Math.sin(t / 1000));
|
||||||
|
const g = 64 + (128 * y / canvas.height) + (64 * Math.cos(t / 1000));
|
||||||
|
const b = 128;
|
||||||
|
|
||||||
|
imageData.data[p + 0] = r;
|
||||||
|
imageData.data[p + 1] = g;
|
||||||
|
imageData.data[p + 2] = b;
|
||||||
|
imageData.data[p + 3] = 255;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.putImageData(imageData, 0, 0);
|
||||||
|
}());
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
cancelAnimationFrame(frame);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
canvas {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: #eee;
|
||||||
|
-webkit-mask: url(logo-mask.svg) 50% 50% no-repeat;
|
||||||
|
mask: url(logo-mask.svg) 50% 50% no-repeat;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<canvas
|
||||||
|
bind:this={canvas}
|
||||||
|
width={32}
|
||||||
|
height={32}
|
||||||
|
></canvas>
|
@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
title: This
|
||||||
|
---
|
||||||
|
|
||||||
|
The readonly `this` binding applies to every element (and component) and allows to you obtain a reference to rendered elements. For example, we can get a reference to a `<canvas>` element:
|
||||||
|
|
||||||
|
```html
|
||||||
|
<canvas
|
||||||
|
bind:this={canvas}
|
||||||
|
width={256}
|
||||||
|
height={256}
|
||||||
|
></canvas>
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that the value of `canvas` will be `undefined` until the component has mounted, so we put the logic inside the `onMount` [lifecycle function](tutorials/onmount).
|
After Width: | Height: | Size: 1.4 KiB |
Loading…
Reference in new issue