UNPKG

swan-docs

Version:
292 lines (242 loc) 10.8 kB
--- title: 视图容器 header: develop nav: component sidebar: view --- view ---- **解释:**视图容器。 **属性说明:** |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | |hover-class | String | none | 指定按下去的样式类。当 hover-class="none" 时,没有点击态效果| |hover-stop-propagation| Boolean | false | 指定是否阻止本节点的祖先节点出现点击态| |hover-start-time| Number | 50 | 按住后多久出现点击态,单位毫秒| |hover-stay-time| Number |400 |手指松开后点击态保留时间,单位毫秒| **示例:** ```xml <view class="single-text-area"> <view class="view-more"> <text>点击加载更多</text> </view> </view> ``` **Bug & Tip:** 1、tip: 如果需要使用滚动视图,请使用 scroll-view; scroll-view ---- **解释:**可滚动视图区域。 **属性说明:** |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | |scroll-x | Boolean | false | 允许横向滚动| |scroll-y| Boolean | false | 允许纵向滚动| |upper-threshold| Number | 50 | 距顶部/左边多远时(单位 px),触发 scrolltoupper 事件| |lower-threshold| Number |50 |距底部/右边多远时(单位 px),触发 scrolltolower 事件| |scroll-top | Number || 设置竖向滚动条位置。要动态设置滚动条位置,用法scroll-top="{= scrollTop =}"| |scroll-left| Number || 设置横向滚动条位置。要动态设置滚动条位置,用法scroll-left="{= scrollLeft =}"| |scroll-into-view | String || 值应为某子元素 idid 不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素| |scroll-with-animation| Boolean | false | 在设置滚动条位置时使用动画过渡| |bindscrolltoupper | EventHandle || 滚动到顶部/左边,会触发 scrolltoupper 事件| |bindscrolltolower | EventHandle | |滚动到底部/右边,会触发 scrolltolower 事件| |bindscroll | EventHandle ||滚动时触发, event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY} | **注意:**使用竖向滚动时,需要给 `<scroll-view/>` 一个固定高度,通过 CSS 设置 height。 **示例:** ```xml <scroll-view scroll-y style="height: 300px;" bind:scrolltoupper="upper" bind:scrolltolower="lower" scroll-into-view="four" upper-threshold="10" lower-threshold="10" scroll-top="150" bind:scroll="myscroll"> <view id="one" class="bg-red">view1</view> <view id="two" class="bg-green">view2</view> <view id="three" class="bg-yellow">view3</view> <view id="four" class="bg-blue">view4</view> </scroll-view> ``` ```css .bg-red, .bg-yellow, .bg-blue, .bg-green { height: 150px; text-align: center; } .bg-red { background: #FFB6C1; } .bg-yellow { background: #FFD700; } .bg-blue { background: #87CEFA; } .bg-green { background: #98FB98; } ``` ```javascript Page({ upper: e => { console.log('upper', e); }, lower: e => { console.log('lower', e); }, myscroll: e => { console.log('scroll', e); } }); ``` **Bug & Tip:** 1、tip: 请勿在 scroll-view 中使用 textarea、map、canvas、video 组件; 2、tip: scroll-into-view 的优先级高于 scroll-top、scroll-left; 3、tip: 在滚动 scroll-view 时会阻止页面回弹,所以在 scroll-view 中滚动,是无法触发 onPullDownRefresh; 4、tip: 若要使用下拉刷新,请使用页面的滚动,而不是 scroll-view; swiper ---- **解释:**滑块视图容器。 **属性说明:** |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | |indicator-dots | Boolean | false |是否显示面板指示点| |indicator-color| Color | rgba(0, 0, 0, .3) | 指示点颜色| |indicator-active-color| Color | #333 | 当前选中的指示点颜色件| |autoplay |Boolean | false |是否自动切换| |current|Number |0 |当前所在页面的 index| |interval | Number | 5000 |自动切换时间间隔| |duration| Number |500 |滑动动画时长| |circular| Boolean |false |是否采用衔接滑动| |vertical | Boolean | false |滑动方向是否为纵向| |bindchange | EventHandle | |current 改变时会触发 change 事件,event.detail = {current: current, source: source}| **注意:**其中只可放置`<swiper-item/>`组件,否则会导致未定义的行为。 ### swiper-item **注意:**仅可放置在`<swiper/>`组件中,宽高自动设置为100%。 **示例:** ```xml <swiper indicator-dots="true" autoplay="true" interval="3000" duration="500"> <block s-for="imgUrl in imgs"> <swiper-item> <image src="{{imgUrl}}" class="slide-image" width="355" height="150"/> </swiper-item> </block> </swiper> ``` ```javascript Page({ data: { imgs: [ "https://ss0.baidu.com/6ONWsjip0QIZ8tyhnq/it/u=955704975,2507359007&fm=173&s=32A2DC4D4E12344D4899DCB80300C013&w=218&h=146&img.JPEG", "https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=984374101,2617012451&fm=173&s=20A24CB176BA0D882C042D700300C092&w=218&h=146&img.JPEG", "https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=1663594687,1286054050&fm=173&s=EAA608C484D2006B5680719A0300E0C1&w=218&h=146&img.JPEG" ] } }) ``` **Bug & Tip:** 1、tip: 如果在 bindchange 的事件回调函数中使用 setData 改变 current 值,则有可能导致 setData 被不停地调用,因而通常情况下请在改变 current 值前检测 source 字段来判断是否是由于用户触摸引起; movable-area ----- **解释:**`movable-view` 的可移动区域。 **注意:**`movable-area` 必须设置width和height属性,不设置默认为10px。 ### movable-view **解释:**可移动的视图容器,在页面中可以拖拽滑动。 **属性说明:** |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | | direction | String | none |movable-view 的移动方向,属性值有 all 、 vertical 、 horizontal 、 none | | inertia | Boolean | false |movable-view 是否带有惯性| |out-of-bounds| Boolean | false |超过可移动区域后,movable-view 是否还可以移动| |x | Number | |定义 x 轴方向的偏移,如果 x 的值不在可移动范围内,会自动移动到可移动范围;改变 x 的值会触发动画| | y | Number ||定义 y 轴方向的偏移,如果 y 的值不在可移动范围内,会自动移动到可移动范围;改变 y 的值会触发动画| | damping | Number |20 |阻尼系数,用于控制 x 或 y 改变时的动画和过界回弹的动画,值越大移动越快| | friction | Number |2 |摩擦系数,用于控制惯性滑动的动画,值越大摩擦力越大,滑动越快停止;必须大于 0,否则会被设置成默认值| | disabled | Boolean |false |是否禁用 | | scale-min | Number |0.5 |定义缩放倍数最小值 | | scale-max | Number |10 |定义缩放倍数最大值 | | scale-value | Number |1 |定义缩放倍数,取值范围为 0.5 - 10 | | bindchange | EventHandle | |拖动过程中触发的事件,event.detail = {x: x, y: y, source: source},其中source表示产生移动的原因,值可为touch(拖动)、out-of-bounds(超出移动范围后的回弹)、inertia(惯性)和空字符串(setData)| **Bug & Tip:** 1、movable-view 必须设置 width 和 height 属性,不设置默认为 10px; 2、movable-view 默认为绝对定位,top 和 left 属性为 0px; 3、当movable-view小于movable-area时,movable-view的移动范围是在movable-area内; 4、当movable-view大于movable-area时,movable-view的移动范围必须包含movable-area(x 轴方向和 y 轴方向分开考虑); **注意:**movable-view必须在<movable-area/>组件中,并且必须是直接子节点,否则不能移动。 **示例:** ```xml <view class="movable-view"> <movable-area style="height: 300px;width: 300px;background: green;"> <movable-view style="height: 40px; width: 40px; background: black;" x="30" y="30" direction="all"> </movable-view> </movable-area> </view> ``` cover-view ----- ### cover-view **解释: **覆盖在原生组件之上的文本视图,可覆盖的原生组件包括 video 、 canvas 、 camera,只支持嵌套 cover-view 、 cover-image 。 ### cover-image **解释: **覆盖在原生组件之上的图片视图,可覆盖的原生组件同 cover-view ,支持嵌套在 cover-view 里。 **属性说明: ** |属性名 |类型 |默认值 |说明| |---- | ---- | ---- |---- | | src | String | |图标路径,支持临时路径、网络地址。暂不支持 base64 格式。| **Tips:** 1、cover-view 支持 overflow: scroll,但不支持动态更新 overflow。 2、最外层 cover-view 支持 position: fixed。 3、支持 css transition 动画,transition-property 只支持 transform (translateX, translateY) 与 opacity。 4、文本建议都套上 cover-view 标签,避免排版错误。 5、只支持基本的定位、布局、文本样式。不支持设置单边的 border、background-image、shadow、overflow: visible 等。 6、建议子节点不要溢出父节点。 7、默认设置的样式有:white-space: nowrap; line-height: 1.2; display: block 。 8、建议不要频繁改变 s-if 表达式的值控制显隐,否则会导致 cover-view 显示异常。 <!-- 9、todu: 事件模型遵循冒泡模型,但不会冒泡到原生组件。 --> <!-- 10、基础库 1.9.0 起支持插在 view 等标签下。在此之前只可嵌套在原生组件map、video、canvas、camera内,避免嵌套在其他组件内。 --> **示例:** ```html <video id="myVideo" src="https://vd3.bdstatic.com/mda-ia8e6q3g23py8qdh/hd/mda-ia8e6q3g23py8qdh.mp4?playlist=%5B%22hd%22%5D&auth_key=1521549485-0-0-d5d042ba3555b2d23909d16a82916ebc&bcevod_channel=searchbox_feed&pd=share" controls> <cover-view class="controls"> <cover-image class="play" bindtap="play" src="https://smartprogram.baidu.com/docs/img/logo.png"> </cover-image> <cover-view class="pause" bindtap="pause">暂停</cover-view> <cover-view class="time">00:00</cover-view> </cover-view> </video> ``` ```css .controls { position: absolute; top: 50%; width: 100%; height: 50px; display: flex; } .play, .pause, .time { flex: 1; height: 100%; background-color: rgba(0, 0, 0, .5); } .pause, .time { text-align: center; color: white; line-height: 50px; } cover-image { width: 100%; height: 100%; } ``` ```javascript Page({ onReady() { this.videoCtx = swan.createVideoContext('myVideo') }, play() { this.videoCtx.play() }, pause() { this.videoCtx.pause() } }) ```