百度智能小程序 可移動(dòng)視圖容器

2020-08-28 15:37 更新

movable-view 可移動(dòng)視圖容器

解釋?zhuān)嚎梢苿?dòng)的視圖容器,在頁(yè)面中可以拖拽滑動(dòng)。movable-view 必須在 movable-area 組件中,并且必須是直接子節(jié)點(diǎn),否則不能移動(dòng)。

屬性說(shuō)明

屬性名 類(lèi)型 默認(rèn)值 必填 說(shuō)明

direction

String

none

movable-view 的移動(dòng)方向,屬性值有 all 、 vertical 、 horizontal 、 none

inertia

Boolean

false

movable-view 是否帶有慣性

out-of-bounds

Boolean

false

超過(guò)可移動(dòng)區(qū)域后,movable-view 是否還可以移動(dòng)。

x

Number

定義 x 軸方向的偏移,如果 x 的值不在可移動(dòng)范圍內(nèi),會(huì)自動(dòng)移動(dòng)到可移動(dòng)范圍;改變 x 的值會(huì)觸發(fā)動(dòng)畫(huà)。

y

Number

定義 y 軸方向的偏移,如果 y 的值不在可移動(dòng)范圍內(nèi),會(huì)自動(dòng)移動(dòng)到可移動(dòng)范圍;改變 y 的值會(huì)觸發(fā)動(dòng)畫(huà)。

damping

Number

20

阻尼系數(shù),用于控制 x 或 y 改變時(shí)的動(dòng)畫(huà)和過(guò)界回彈的動(dòng)畫(huà),值越大移動(dòng)越快。

friction

Number

2

摩擦系數(shù),用于控制慣性滑動(dòng)的動(dòng)畫(huà),值越大摩擦力越大,滑動(dòng)越快停止;必須大于 0,否則會(huì)被設(shè)置成默認(rèn)值。

disabled

Boolean

false

是否禁用

scale

Boolean

false

是否支持雙指縮放,默認(rèn)縮放手勢(shì)生效區(qū)域是在 movable-view 內(nèi)。

scale-min

Number

0.5

定義縮放倍數(shù)最小值

scale-max

Number

10

定義縮放倍數(shù)最大值

scale-value

Number

1

定義縮放倍數(shù),取值范圍為 0.5 - 10 。

animation

Boolean

true

是否使用動(dòng)畫(huà)

bindchange

EventHandle

拖動(dòng)過(guò)程中觸發(fā)的事件,event.detail = {x: x, y: y, source: source},其中 source 表示產(chǎn)生移動(dòng)的原因,值可為 touch(拖動(dòng))。

bindscale

EventHandle

縮放過(guò)程中觸發(fā)的事件,event.detail = {x: x, y: y, scale: scale}

htouchmove

EventHandle

手指初次觸摸后發(fā)生橫向移動(dòng),如果 catch 此事件,則意味著 touchmove 事件也被 catch

vtouchmove

EventHandle

手指初次觸摸后發(fā)生縱向移動(dòng),如果 catch 此事件,則意味著 touchmove 事件也被 catch

direction 有效值

說(shuō)明

all

水平方向和垂直方向

vertical

垂直方向

horizontal

水平方向

none

不可移動(dòng)

示例 

在開(kāi)發(fā)者工具中打開(kāi)

代碼示例 1: movable-view 區(qū)域小于 movable-area

<view class="wrap">
    <view class="card-area">
        <view class="top-description border-bottom">
            movable-view區(qū)域小于movable-area
        </view>
        <movable-area>
            <movable-view x="{=x1=}" y="{=y1=}" damping="20" disabled="false" direction="all">text</movable-view>
        </movable-area> 
        <button bind:tap="move" class="move-button" type="primary">點(diǎn)擊移動(dòng)到 (50px, 50px)</button>
    </view>
</view>
Page({
    data: {
        x1: 30,
        y1: 30,
    },
    move() {
        this.setData({
            x1: 50,
            y1: 50
        })
    }
});

代碼示例 2:movable-view 區(qū)域大于 movable-area<view class="wrap">

    <view class="card-area">
        <view class="top-description border-bottom">
            movable-view區(qū)域大于movable-area
        </view>
        <movable-area>
            <!-- 添加大于movable-area的class -->
            <movable-view x="{=x=}" y="{=y=}" class="bigger-area" direction="all">text</movable-view>
        </movable-area>
    </view>
</view>
Page({
    data: {
        x: 30,
        y: 30
    },
});
movable-area {
    width: 3.88rem;
    height: 2.18rem;
    background-color: #fff;
    overflow: hidden;
    margin: 0;
    border-radius: .05rem;
}

movable-view {

    background-color: #5B9FFF;
    color: #fff;
    border-radius: .05rem;
    display: flex;
    align-items: center;
    justify-content: center;
}


.bigger-area {
    width: 4.8rem;
    height: 2.8rem;
}

代碼示例 3:只可以橫向移動(dòng)

<view class="card-area">
    <view class="top-description border-bottom">
        只可以橫向移動(dòng)
    </view>
    <movable-area htouchmove>
        <movable-view x="{=x=}" y="{=y=}" direction="horizontal">text</movable-view>
    </movable-area>
</view>
Page({
    data: {
        x: 30,
        y: 30
    },
});

代碼示例 4:只可以縱向移動(dòng)<view class="card-area">

    <view class="top-description border-bottom">
        只可以縱向移動(dòng)
    </view>
    <movable-area vtouchmove>
        <movable-view x="{=x=}" y="{=y=}" direction="vertical">text</movable-view>
    </movable-area>
</view>
Page({
    data: {
        x: 30,
        y: 30
    },
});

代碼示例 5: 可超出邊界<view class="wrap">

   <view class="card-area">
        <view class="top-description border-bottom">
            可超出邊界
        </view>
        <movable-area>
            <movable-view x="{=x=}" y="{=y=}" direction="all" out-of-bounds>text</movable-view>
        </movable-area>
    </view>
</view>
Page({
    data: {
        x: 30,
        y: 30
    },
});

代碼示例 6: 帶有慣性

<view class="wrap">
    <view class="card-area">
        <view class="top-description border-bottom">
            帶有慣性
        </view>
        <movable-area>
            <movable-view x="{=x=}" y="{=y=}" direction="all" inertia friction="0.5">text</movable-view>
        </movable-area>
    </view>
</view>
Page({
    data: {
        x: 30,
        y: 30
    },
});

代碼示例 7: 可放縮

<view class="wrap">
    <view class="card-area">
        <view class="top-description border-bottom">
            可放縮
        </view>
        <movable-area scale-area="true">
            <movable-view 
                x="{=x=}" 
                y="{=y=}" 
                scale
                scale-min="0.5"
                scale-max="4"
                scale-value="{{scale}}"
                direction="all" 
                animation="false" 
                bindchange="onChange" 
                bindscale="onScale">
               text
            </movable-view>
        </movable-area>
        <button bind:tap="scale" class="scale-button" type="primary">點(diǎn)擊放大3倍</button>
    </view>
</view>
Page({
    data: {
        x: 30,
        y: 30,
        scale: 1
    },
    move() {
        this.setData({
            x1: 50,
            y1: 50
        })
    },
    scale() {
        this.setData({
            scale: 3
        })
    },
    onChange(e) {
        console.log(e.detail)
    },
    onScale(e) {
        console.log(e.detail)
    }
});

Bug & Tip

  • Tip:movable-view 必須設(shè)置 width 和 height 屬性,不設(shè)置默認(rèn)為 10px。
  • Tip:movable-view 默認(rèn)為絕對(duì)定位,top 和 left 屬性為 0px。
  • Tip:當(dāng) movable-view 小于 movable-area 時(shí),movable-view 的移動(dòng)范圍是在 movable-area 內(nèi)。
  • Tip:當(dāng) movable-view 大于 movable-area 時(shí),movable-view 的移動(dòng)范圍必須包含 movable-area(x 軸方向和 y 軸方向分開(kāi)考慮)。
  • Tip:movable-view 必須在組件中,并且必須是直接子節(jié)點(diǎn),否則不能移動(dòng)。

參考示例

參考示例 1:可懸浮菜單

在開(kāi)發(fā)者工具中打開(kāi)

<view class="wrap">
    <movable-area style="height: {{height}}px; width: {{width}}px; background-color: #f5f5f5">
        <movable-view x="{=x=}" y="{=y=}" direction="all" animation="false" bindchange="onChange" bindscale="onScale" scale scale-min="0.5" scale-max="4">
              菜單
        </movable-view>
    </movable-area>
</view>
Page({
    data: {
        x: 30,
        y: 30,
    },
    onShow() {
        swan.getSystemInfo({
            success: res => {
                console.log('getSystemInfo success', res);
                this.setData({
                    'width': res.windowWidth,
                    'height': res.windowHeight
                });
            },
            fail: err => {
                console.log('getSystemInfo fail', err);
            }
        });
    }
});


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)