|
@@ -0,0 +1,210 @@
|
|
|
+<template>
|
|
|
+ <view class="pt">
|
|
|
+ <view class="pt-verification-box">
|
|
|
+ <view class="pt-verification-images">
|
|
|
+ <view class="iconfont refresh" @click="refresh"></view>
|
|
|
+ <image mode="widthFix" :src="'data:image/jpeg;base64,'+bgImg" class="bg-img"></image>
|
|
|
+ <image :src="'data:image/jpeg;base64,'+maskImg" class="drag-img" mode="widthFix" :style="{ left: dragWidth + 'px', top: top + 'px'}"></image>
|
|
|
+ <view class="mask"></view>
|
|
|
+ </view>
|
|
|
+ <view class="pt-dragbar">
|
|
|
+ <view :class="['pt-drag-area',{fail: isFail,success: isSuccess}]" :style="{ width: dragWidth + 'px'}" v-if="dragWidth"></view>
|
|
|
+ <movable-area class="pt-dragbar-area">
|
|
|
+ <movable-view
|
|
|
+ :class="['pt-dragbar-view',{active: dragWidth > 2,fail: isFail,success: isSuccess}]"
|
|
|
+ :direction="direction"
|
|
|
+ @change="dragStart"
|
|
|
+ @touchend="dragEnd"
|
|
|
+ :damping="200"
|
|
|
+ :x="x"
|
|
|
+ :animation="false"
|
|
|
+ :disabled="disabled"
|
|
|
+ :data-dragWidth="dragWidth">
|
|
|
+ <text class="iconfont">
|
|
|
+ <block v-if="isSuccess"></block>
|
|
|
+ <block v-else-if="isFail"></block>
|
|
|
+ <block v-else></block>
|
|
|
+ </text>
|
|
|
+ </movable-view>
|
|
|
+ <text v-if="dragWidth==0" class="tips">{{tips}}</text>
|
|
|
+ </movable-area>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+ </view>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+ export default {
|
|
|
+ props: {
|
|
|
+ // 背景大图
|
|
|
+ bgImg: {
|
|
|
+ type: String,
|
|
|
+ default: ''
|
|
|
+ },
|
|
|
+ // 块状小图
|
|
|
+ maskImg: {
|
|
|
+ type: String,
|
|
|
+ default: ''
|
|
|
+ },
|
|
|
+ // 坑位的top值
|
|
|
+ top: {
|
|
|
+ type: Number,
|
|
|
+ default: 0
|
|
|
+ },
|
|
|
+ // 滑块滑动的方向
|
|
|
+ direction: {
|
|
|
+ type: String,
|
|
|
+ default: 'horizontal'
|
|
|
+ },
|
|
|
+ // 判断是否成功
|
|
|
+ isSuccess: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false,
|
|
|
+ },
|
|
|
+ // 判断是否失败
|
|
|
+ isFail: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false,
|
|
|
+ }
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ tips: '向右拖动滑块填充拼图',
|
|
|
+ disabled: false,
|
|
|
+ dragWidth: 0,
|
|
|
+ x: 0
|
|
|
+ };
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ // 开始滑动
|
|
|
+ dragStart(e){
|
|
|
+ this.dragWidth = e.detail.x
|
|
|
+ },
|
|
|
+
|
|
|
+ // 停止滑动
|
|
|
+ dragEnd(e){
|
|
|
+ this.x = this.dragWidth;
|
|
|
+ this.$emit('finish', this.dragWidth);
|
|
|
+ },
|
|
|
+
|
|
|
+ refresh(){
|
|
|
+ console.log(1);
|
|
|
+ this.dragWidth = 0;
|
|
|
+ this.isFail = false;
|
|
|
+ this.isSuccess = false;
|
|
|
+ this.x = 0;
|
|
|
+ this.disabled = false;
|
|
|
+ this.$emit('refresh');
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss">
|
|
|
+ @font-face {
|
|
|
+ font-family: 'iconfont'; /* project id 2047533 */
|
|
|
+ src: url('https://at.alicdn.com/t/font_2047533_o8axbabfs3.ttf') format('truetype')
|
|
|
+ }
|
|
|
+ .iconfont {
|
|
|
+ font-family: iconfont !important;
|
|
|
+ font-size: 16px;
|
|
|
+ font-style: normal;
|
|
|
+ -webkit-font-smoothing: antialiased;
|
|
|
+ -moz-osx-font-smoothing: grayscale;
|
|
|
+ }
|
|
|
+ .pt{
|
|
|
+ width: 300px;
|
|
|
+ margin: 0 auto;
|
|
|
+ &-verification-images{
|
|
|
+ position: relative;
|
|
|
+ .refresh{
|
|
|
+ position: absolute;
|
|
|
+ right: 20rpx;
|
|
|
+ top: 20rpx;
|
|
|
+ z-index: 10;
|
|
|
+ color: #FFF;
|
|
|
+ font-weight: bold;
|
|
|
+ }
|
|
|
+ .bg-img{
|
|
|
+ width: 100%;
|
|
|
+ vertical-align: top;
|
|
|
+ }
|
|
|
+ .drag-img{
|
|
|
+ position: absolute;
|
|
|
+ width: 112rpx;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ z-index: 1;
|
|
|
+ }
|
|
|
+ .mask {
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ background: rgba($color: #000000, $alpha: .2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &-dragbar{
|
|
|
+ position: relative;
|
|
|
+ height: 80rpx;
|
|
|
+ background-color: #F7F7F7;
|
|
|
+ border: solid 2rpx #EEE;
|
|
|
+ margin-top: 20rpx;
|
|
|
+ .pt-drag-area{
|
|
|
+ position: absolute;
|
|
|
+ height: 80rpx;
|
|
|
+ border: solid 2rpx $uni-color-primary;
|
|
|
+ background-color: #D1E9F1;
|
|
|
+ top: -2rpx;
|
|
|
+ &.fail{
|
|
|
+ border-color: $uni-color-error;
|
|
|
+ background-color: #ffdbdb;
|
|
|
+ }
|
|
|
+ &.success{
|
|
|
+ border-color: $uni-color-success;
|
|
|
+ background-color: #d7ffe1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &-area{
|
|
|
+ position: absolute;
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ left: 0;
|
|
|
+ top: 0;
|
|
|
+ .tips{
|
|
|
+ font-size: 24rpx;
|
|
|
+ color: #999;
|
|
|
+ position: absolute;
|
|
|
+ left: 50%;
|
|
|
+ top: 50%;
|
|
|
+ transform: translate(-50%,-50%);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ &-view{
|
|
|
+ width: 80rpx;
|
|
|
+ height: 80rpx;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ border: solid 2rpx #EEE;
|
|
|
+ background-color: #FFF;
|
|
|
+ top: -2rpx;
|
|
|
+ left: 0;
|
|
|
+ &.active{
|
|
|
+ background-color: $uni-color-primary;
|
|
|
+ border-color: $uni-color-primary;
|
|
|
+ color: #FFF;
|
|
|
+ }
|
|
|
+ &.fail{
|
|
|
+ background-color: $uni-color-error;
|
|
|
+ border-color: $uni-color-error;
|
|
|
+ }
|
|
|
+ &.success{
|
|
|
+ border-color: $uni-color-success;
|
|
|
+ background-color: #00a029;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+</style>
|