| | |
| | | <template>
|
| | | <view class="uni-swipe">
|
| | | <!-- 在微信小程序 app vue端 h5 使用wxs 实现-->
|
| | | <!-- #ifdef APP-VUE || MP-WEIXIN || H5 -->
|
| | | <view class="uni-swipe_content">
|
| | | <view :data-disabled="disabled" :data-position="pos" :change:prop="swipe.sizeReady" :prop="pos" class="uni-swipe_move-box selector-query-hock move-hock"
|
| | | @touchstart="swipe.touchstart" @touchmove="swipe.touchmove" @touchend="swipe.touchend" @change="change">
|
| | | <view class="uni-swipe_box">
|
| | | <slot />
|
| | | </view>
|
| | | <template> |
| | | <view class="uni-swipe"> |
| | | <!-- 在微信小程序 app vue端 h5 使用wxs 实现--> |
| | | <!-- #ifdef APP-VUE || MP-WEIXIN || H5 --> |
| | | <view class="uni-swipe_content"> |
| | | <view :data-disabled="disabled" :data-position="pos" :change:prop="swipe.sizeReady" :prop="pos" class="uni-swipe_move-box selector-query-hock move-hock" |
| | | @touchstart="swipe.touchstart" @touchmove="swipe.touchmove" @touchend="swipe.touchend" @change="change"> |
| | | <view class="uni-swipe_box"> |
| | | <slot /> |
| | | </view> |
| | | <view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock"> |
| | | <!-- 使用 touchend 解决 ios 13 不触发按钮事件的问题-->
|
| | | <view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
|
| | | backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
|
| | | fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
|
| | | }"
|
| | | class="uni-swipe_button button-hock" @touchend="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | <!-- #endif -->
|
| | |
|
| | | <!-- app nvue端 使用 bindingx -->
|
| | | <!-- #ifdef APP-NVUE -->
|
| | | <view ref="selector-box-hock" class="uni-swipe_content" @horizontalpan="touchstart" @touchend="touchend">
|
| | | <view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock" :style="{width:right+'px'}">
|
| | | <view ref="button-hock" v-for="(item,index) in options" :key="index" :style="{
|
| | | backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',left: right+'px'}"
|
| | | class="uni-swipe_button " @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'}">{{ item.text }}</text></view>
|
| | | </view>
|
| | | <view ref='selector-content-hock' class="uni-swipe_move-box selector-query-hock">
|
| | | <view class="uni-swipe_box">
|
| | | <slot />
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | <!-- #endif -->
|
| | |
|
| | | <!-- 在非 app 端、非微信小程序、支付宝小程序、h5端使用 js -->
|
| | | <!-- #ifndef APP-PLUS || MP-WEIXIN || MP-ALIPAY || H5 -->
|
| | | <view class="uni-swipe_content">
|
| | | <view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock">
|
| | | <view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
|
| | | backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
|
| | | fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
|
| | | }"
|
| | | class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
|
| | | </view>
|
| | | <view ref='selector-content-hock' class="selector-query-hock" @touchstart="touchstart" @touchmove="touchmove"
|
| | | @touchend="touchend" :class="{'ani':uniShow}" :style="{transform:moveLeft}">
|
| | | <view class="uni-swipe_move-box" >
|
| | | <view class="uni-swipe_box">
|
| | | <slot />
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | </view>
|
| | | <!-- #endif -->
|
| | | <!-- #ifdef MP-ALIPAY -->
|
| | | <view class="uni-swipe-box" @touchstart="touchstart" @touchmove="touchmove" @touchend="touchend">
|
| | | <view class="viewWidth-hook">
|
| | | <movable-area v-if="viewWidth !== 0" class="movable-area" :style="{width:(viewWidth-buttonWidth)+'px'}">
|
| | | <movable-view class="movable-view" direction="horizontal" :animation="!transition" :style="{width:viewWidth+'px'}"
|
| | | :class="[transition?'transition':'']" :x="x" :disabled="disabledView" @change="onChange">
|
| | | <view class="movable-view-box">
|
| | | <slot></slot>
|
| | | </view>
|
| | | </movable-view>
|
| | | </movable-area>
|
| | | </view>
|
| | | <view ref="selector-button-hock" class="uni-swipe_button-group viewWidth-hook">
|
| | | <view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{
|
| | | backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',
|
| | | fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'
|
| | | }"
|
| | | class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view>
|
| | | </view>
|
| | | </view>
|
| | | <!-- #endif -->
|
| | | </view>
|
| | | </template>
|
| | | <script src="./index.wxs" module="swipe" lang="wxs"></script>
|
| | | <script>
|
| | | // #ifdef APP-VUE|| MP-WEIXIN || H5
|
| | | import mpwxs from './mpwxs'
|
| | | // #endif
|
| | |
|
| | | // #ifdef APP-NVUE
|
| | | import bindingx from './bindingx.js'
|
| | | // #endif
|
| | |
|
| | | // #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY || H5
|
| | | import mixins from './mpother'
|
| | | // #endif
|
| | |
|
| | | // #ifdef MP-ALIPAY
|
| | | import mpalipay from './mpalipay'
|
| | | // #endif
|
| | | <!-- 使用 touchend 解决 ios 13 不触发按钮事件的问题--> |
| | | <view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{ |
| | | backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD', |
| | | fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px' |
| | | }" |
| | | class="uni-swipe_button button-hock" @touchend="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <!-- #endif --> |
| | | |
| | | <!-- app nvue端 使用 bindingx --> |
| | | <!-- #ifdef APP-NVUE --> |
| | | <view ref="selector-box-hock" class="uni-swipe_content" @horizontalpan="touchstart" @touchend="touchend"> |
| | | <view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock" :style="{width:right+'px'}"> |
| | | <view ref="button-hock" v-for="(item,index) in options" :key="index" :style="{ |
| | | backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD',left: right+'px'}" |
| | | class="uni-swipe_button " @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px'}">{{ item.text }}</text></view> |
| | | </view> |
| | | <view ref='selector-content-hock' class="uni-swipe_move-box selector-query-hock"> |
| | | <view class="uni-swipe_box"> |
| | | <slot /> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <!-- #endif --> |
| | | |
| | | <!-- 在非 app 端、非微信小程序、支付宝小程序、h5端使用 js --> |
| | | <!-- #ifndef APP-PLUS || MP-WEIXIN || MP-ALIPAY || H5 --> |
| | | <view class="uni-swipe_content"> |
| | | <view ref="selector-button-hock" class="uni-swipe_button-group selector-query-hock move-hock"> |
| | | <view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{ |
| | | backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD', |
| | | fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px' |
| | | }" |
| | | class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view> |
| | | </view> |
| | | <view ref='selector-content-hock' class="selector-query-hock" @touchstart="touchstart" @touchmove="touchmove" |
| | | @touchend="touchend" :class="{'ani':uniShow}" :style="{transform:moveLeft}"> |
| | | <view class="uni-swipe_move-box" > |
| | | <view class="uni-swipe_box"> |
| | | <slot /> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | <!-- #endif --> |
| | | <!-- #ifdef MP-ALIPAY --> |
| | | <view class="uni-swipe-box" @touchstart="touchstart" @touchmove="touchmove" @touchend="touchend"> |
| | | <view class="viewWidth-hook"> |
| | | <movable-area v-if="viewWidth !== 0" class="movable-area" :style="{width:(viewWidth-buttonWidth)+'px'}"> |
| | | <movable-view class="movable-view" direction="horizontal" :animation="!transition" :style="{width:viewWidth+'px'}" |
| | | :class="[transition?'transition':'']" :x="x" :disabled="disabledView" @change="onChange"> |
| | | <view class="movable-view-box"> |
| | | <slot></slot> |
| | | </view> |
| | | </movable-view> |
| | | </movable-area> |
| | | </view> |
| | | <view ref="selector-button-hock" class="uni-swipe_button-group viewWidth-hook"> |
| | | <view v-for="(item,index) in options" :data-button="btn" :key="index" :style="{ |
| | | backgroundColor: item.style && item.style.backgroundColor ? item.style.backgroundColor : '#C7C6CD', |
| | | fontSize: item.style && item.style.fontSize ? item.style.fontSize : '16px' |
| | | }" |
| | | class="uni-swipe_button button-hock" @click.stop="onClick(index,item)"><text class="uni-swipe_button-text" :style="{color: item.style && item.style.color ? item.style.color : '#FFFFFF',}">{{ item.text }}</text></view> |
| | | </view> |
| | | </view> |
| | | <!-- #endif --> |
| | | </view> |
| | | </template> |
| | | <script src="./index.wxs" module="swipe" lang="wxs"></script> |
| | | <script> |
| | | // #ifdef APP-VUE|| MP-WEIXIN || H5 |
| | | import mpwxs from './mpwxs' |
| | | // #endif |
| | | |
| | | // #ifdef APP-NVUE |
| | | import bindingx from './bindingx.js' |
| | | // #endif |
| | | |
| | | // #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY || H5 |
| | | import mixins from './mpother' |
| | | // #endif |
| | | |
| | | // #ifdef MP-ALIPAY |
| | | import mpalipay from './mpalipay' |
| | | // #endif |
| | | |
| | | /** |
| | | * SwipeActionItem 滑动操作子组件 |
| | |
| | | * @event {Function} click 点击选项按钮时触发事件,e = {content,index} ,content(点击内容)、index(下标) |
| | | * @event {Function} change 组件打开或关闭时触发,true:开启状态;false:关闭状态 |
| | | */ |
| | |
|
| | | export default {
|
| | | // #ifdef APP-VUE|| MP-WEIXIN||H5
|
| | | mixins: [mpwxs],
|
| | | |
| | | export default { |
| | | // #ifdef APP-VUE|| MP-WEIXIN||H5 |
| | | mixins: [mpwxs], |
| | | // #endif |
| | |
|
| | | // #ifdef APP-NVUE
|
| | | mixins: [bindingx],
|
| | | |
| | | // #ifdef APP-NVUE |
| | | mixins: [bindingx], |
| | | // #endif |
| | |
|
| | | // #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY || H5
|
| | | mixins: [mixins],
|
| | | |
| | | // #ifndef APP-PLUS|| MP-WEIXIN || MP-ALIPAY || H5 |
| | | mixins: [mixins], |
| | | // #endif |
| | |
|
| | | // #ifdef MP-ALIPAY
|
| | | mixins: [mpalipay],
|
| | | |
| | | // #ifdef MP-ALIPAY |
| | | mixins: [mpalipay], |
| | | // #endif |
| | |
|
| | | props: {
|
| | | /**
|
| | | * 按钮内容
|
| | | */
|
| | | options: {
|
| | | type: Array,
|
| | | default () {
|
| | | return []
|
| | | }
|
| | | },
|
| | | /**
|
| | | * 禁用
|
| | | */
|
| | | disabled: {
|
| | | type: Boolean,
|
| | | default: false
|
| | | },
|
| | | /**
|
| | | * 变量控制开关
|
| | | */
|
| | | show: {
|
| | | type: Boolean,
|
| | | default: false
|
| | | },
|
| | | /**
|
| | | * 是否自动关闭
|
| | | */
|
| | | autoClose: {
|
| | | type: Boolean,
|
| | | default: true
|
| | | }
|
| | | },
|
| | | inject: ['swipeaction']
|
| | |
|
| | |
|
| | | }
|
| | | </script>
|
| | | <style lang="scss" scoped>
|
| | | .uni-swipe {
|
| | | overflow: hidden;
|
| | | }
|
| | |
|
| | | .uni-swipe-box {
|
| | | position: relative;
|
| | | width: 100%;
|
| | | }
|
| | |
|
| | | .uni-swipe_content {
|
| | | flex: 1;
|
| | | position: relative;
|
| | | }
|
| | |
|
| | | .uni-swipe_move-box {
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | position: relative;
|
| | | flex-direction: row;
|
| | | }
|
| | |
|
| | | .uni-swipe_box {
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | flex-direction: row;
|
| | | width: 100%;
|
| | | flex-shrink: 0;
|
| | | /* #endif */
|
| | | /* #ifdef APP-NVUE */
|
| | | flex: 1;
|
| | | /* #endif */
|
| | | font-size: 14px;
|
| | | background-color: #fff;
|
| | | }
|
| | |
|
| | | .uni-swipe_button-group {
|
| | | /* #ifndef APP-VUE|| MP-WEIXIN||H5 */
|
| | | position: absolute;
|
| | | top: 0;
|
| | | right: 0;
|
| | | bottom: 0;
|
| | | z-index: 0;
|
| | | /* #endif */
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | flex-shrink: 0;
|
| | | /* #endif */
|
| | | flex-direction: row;
|
| | | }
|
| | |
|
| | | .uni-swipe_button {
|
| | | /* #ifdef APP-NVUE */
|
| | | position: absolute;
|
| | | left: 0;
|
| | | top: 0;
|
| | | bottom: 0;
|
| | | /* #endif */
|
| | | /* #ifndef APP-NVUE */
|
| | | display: flex;
|
| | | /* #endif */
|
| | | flex-direction: row;
|
| | | justify-content: center;
|
| | | align-items: center;
|
| | | padding: 0 20px;
|
| | | }
|
| | |
|
| | | .uni-swipe_button-text {
|
| | | /* #ifndef APP-NVUE */
|
| | | flex-shrink: 0;
|
| | | /* #endif */
|
| | | font-size: 14px;
|
| | | }
|
| | |
|
| | | .ani {
|
| | | transition-property: transform;
|
| | | transition-duration: 0.3s;
|
| | | transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1);
|
| | | |
| | | props: { |
| | | /** |
| | | * 按钮内容 |
| | | */ |
| | | options: { |
| | | type: Array, |
| | | default () { |
| | | return [] |
| | | } |
| | | }, |
| | | /** |
| | | * 禁用 |
| | | */ |
| | | disabled: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | /** |
| | | * 变量控制开关 |
| | | */ |
| | | show: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | /** |
| | | * 是否自动关闭 |
| | | */ |
| | | autoClose: { |
| | | type: Boolean, |
| | | default: true |
| | | } |
| | | }, |
| | | inject: ['swipeaction'] |
| | | |
| | | |
| | | } |
| | |
|
| | | /* #ifdef MP-ALIPAY */
|
| | | .movable-area {
|
| | | width: 300px;
|
| | | height: 100%;
|
| | | height: 45px;
|
| | | }
|
| | |
|
| | | .movable-view {
|
| | | position: relative;
|
| | | width: 160%;
|
| | | height: 45px;
|
| | | z-index: 2;
|
| | | }
|
| | | </script> |
| | | <style lang="scss" scoped> |
| | | .uni-swipe { |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .uni-swipe-box { |
| | | position: relative; |
| | | width: 100%; |
| | | } |
| | | |
| | | .uni-swipe_content { |
| | | flex: 1; |
| | | position: relative; |
| | | } |
| | | |
| | | .uni-swipe_move-box { |
| | | /* #ifndef APP-NVUE */ |
| | | display: flex; |
| | | /* #endif */ |
| | | position: relative; |
| | | flex-direction: row; |
| | | } |
| | | |
| | | .uni-swipe_box { |
| | | /* #ifndef APP-NVUE */ |
| | | display: flex; |
| | | flex-direction: row; |
| | | width: 100%; |
| | | flex-shrink: 0; |
| | | /* #endif */ |
| | | /* #ifdef APP-NVUE */ |
| | | flex: 1; |
| | | /* #endif */ |
| | | font-size: 14px; |
| | | background-color: #fff; |
| | | } |
| | | |
| | | .uni-swipe_button-group { |
| | | /* #ifndef APP-VUE|| MP-WEIXIN||H5 */ |
| | | position: absolute; |
| | | top: 0; |
| | | right: 0; |
| | | bottom: 0; |
| | | z-index: 0; |
| | | /* #endif */ |
| | | /* #ifndef APP-NVUE */ |
| | | display: flex; |
| | | flex-shrink: 0; |
| | | /* #endif */ |
| | | flex-direction: row; |
| | | } |
| | | |
| | | .uni-swipe_button { |
| | | /* #ifdef APP-NVUE */ |
| | | position: absolute; |
| | | left: 0; |
| | | top: 0; |
| | | bottom: 0; |
| | | /* #endif */ |
| | | /* #ifndef APP-NVUE */ |
| | | display: flex; |
| | | /* #endif */ |
| | | flex-direction: row; |
| | | justify-content: center; |
| | | align-items: center; |
| | | padding: 0 20px; |
| | | } |
| | | |
| | | .uni-swipe_button-text { |
| | | /* #ifndef APP-NVUE */ |
| | | flex-shrink: 0; |
| | | /* #endif */ |
| | | font-size: 14px; |
| | | } |
| | | |
| | | .ani { |
| | | transition-property: transform; |
| | | transition-duration: 0.3s; |
| | | transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1); |
| | | } |
| | | |
| | | /* #ifdef MP-ALIPAY */ |
| | | .movable-area { |
| | | width: 300px; |
| | | height: 100%; |
| | | height: 45px; |
| | | } |
| | | |
| | | .movable-view { |
| | | position: relative; |
| | | width: 160%; |
| | | height: 45px; |
| | | z-index: 2; |
| | | } |
| | | .transition { |
| | | transition: all 0.3s; |
| | | } |
| | | |
| | | .movable-view-box {
|
| | | width: 100%;
|
| | | height: 100%;
|
| | | background-color: #fff;
|
| | | .movable-view-box { |
| | | width: 100%; |
| | | height: 100%; |
| | | background-color: #fff; |
| | | } |
| | | /* #endif */
|
| | | /* #endif */ |
| | | </style> |