【Svelte】-(7)绑定|Each 块绑定 / audio video 媒体标签绑定 / client offset 尺寸绑定 / this / 组件绑定

简介: 【Svelte】-(7)绑定|Each 块绑定 / audio video 媒体标签绑定 / client offset 尺寸绑定 / this / 组件绑定

Each 块绑定


您也可以在 Each 的过程中使用。


不过需要注意的是,与这些 <input> 交互会改变数组。当要使用不可变数据,应该去避免使用这些绑定,并且改用事件来处理这些内容。

<script>
  let items = [{}, {}, {}]
</script>
{#each items as item,i}
  <div>
    <p>
      {i}:<input bind:value={item.input}>
    </p>
    <b>
      value: {item.input}
    </b>
  </div>
{/each}

14.png

尽管没有定义 item.input,但还是可以使用


媒体标签绑定


<audio> 和 <video> 标签也有许多可绑定属性。


只读属性

属性 类型
duration 视频的总时长,以秒为单位
buffered {start, end} 数组对象
seekable {start, end} 数组对象
played {start, end} 数组对象
seeking boolean
ended boolean

双向绑定

属性 类型
currentTime 视频当前播放位置,以秒为单位
playbackRate 视频播放速度,正常是 1

paused

是否已暂停

volume

音量,.0 到 1

muted 是否被暂停


视频还有独特的 videoWidth 和 videoHeight 可以绑定,效果当然不言而喻。


尺寸绑定


每个 block(块级)元素都有、clientWidth 、 clientHeight 和 offsetWidth 、 offsetHeight。


当然都是只读的。

<script>
  let size = 25
  let oX, oY
</script>
<input type=range min=10 max="50" bind:value={size}>
<div>
  <span
    style="font-size: {size}px;"
    bind:offsetWidth={oX}
    bind:offsetHeight={oY}
  >
    我想养只猫
</span>
</div>
<p>
  offset width: <b>{oX}</b>px,
  offset height: <b>{oY}</b>px
</p>


15.png

this


只读 this 可以绑定于每个元素和组件,而且可以获取对 <canvas> 渲染元素的引用。


请注意,在组件挂载之前的值将是undefined,因此我们将逻辑放在 onMount 生命周期函数中。


生命周期在后面的文章会提到。

<script>
  import { onMount } from 'svelte'
  let t = ''
  console.log('挂载前,this内容',t)
  onMount(() => {
    console.log('挂载后,this内容',t)
  })
</script>
<div bind:this={t}>hi</div>

16.png

组件绑定


就像你可以绑定到 DOM 元素的属性一样,你也可以绑定到组件的 props,也可以绑定到组件实例本身,来使用组件内导出的内容。


来看一个示例:


Tips.svelte

<script>
  let tip = null
  export function show(content) {
    tip = content
  }
</script>
{#if tip !== null}
  <div class="tip">
    {tip}
  </div>
{/if}
<style>
  .tip {
    width: 100%;
    height: 40px;
    background: rgb(234, 245, 255);
    border-radius: 5px;
    display: flex;
    justify-content: center;
    align-items: center;
  }
</style>


App.svelte

<script>
  import Tips from './Tips.svelte';
  let t;
</script>
<Tips bind:this={t} />
<button on:click={() => t.show('hi')}>Show 'hi'</button>

17.png

目录
相关文章
|
7月前
16avalon - 指令ms-attr(属性绑定)
16avalon - 指令ms-attr(属性绑定)
32 1
|
API
Element UI Loading 加载组件动态变更 text 值(加载文案)
有这样的一个需求,我在上传文件的时候,上传阶段耗时较长,所以利用加载动画作为友好提示用户等待。
933 0
Element UI Loading 加载组件动态变更 text 值(加载文案)
|
2天前
uniapp App端 解决input@input事件动态修改值不生效的问题
uniapp App端 解决input@input事件动态修改值不生效的问题
103 1
|
6月前
|
JavaScript
vue动态修改audio地址
vue动态修改audio地址
33 0
|
9月前
|
前端开发
react是否支持给标签设置自定义的属性,比如给video标签设置webkit-playsinline?
react是否支持给标签设置自定义的属性,比如给video标签设置webkit-playsinline?
117 0
access模块学习--类,对象,事件,方法,设置焦点
access模块学习--类,对象,事件,方法,设置焦点
|
10月前
Echarts调用同一个组件显示在不同位置的方法
Echarts调用同一个组件显示在不同位置的方法
60 0
|
前端开发
前端 video 元素总是浮在最上方,增加一个 z-index 属性
前端 video 元素总是浮在最上方,增加一个 z-index 属性
|
Web App开发 JSON JavaScript
|
JavaScript
离开页面关闭video标签
离开页面关闭video标签
离开页面关闭video标签