Browse Source

fix:左滑删除按钮修改

yewenwen 6 years ago
parent
commit
71fa7b3fa5

File diff suppressed because it is too large
+ 508 - 515
src/config.json


+ 37 - 26
src/packages/leftslip/demo.vue

@@ -4,7 +4,9 @@
         <div>
             <nut-leftslip>
                 <div slot="slip-main" class="slip-main">向左滑动我</div>
-                <div slot="slipbtns" class="slipbtns"><a href="javascript:;">删除</a><a href="javascript:;" class="favorite">收藏</a></div>
+                <div slot="slipbtns" class="slipbtns"
+                    ><a href="javascript:;" @click="delSlipItem">删除</a><a href="javascript:;" class="favorite">收藏</a></div
+                >
             </nut-leftslip>
         </div>
         <p>单个按钮</p>
@@ -13,33 +15,29 @@
                 <div slot="slip-main" class="slip-main">单一按钮</div>
                 <div slot="slipbtns" class="slipbtns"><a href="javascript:;">删除</a></div>
             </nut-leftslip>
-            <nut-leftslip onlyDel @oneDelete="oneDel($event)">
-                <div slot="slip-main" class="slip-main">向左滑一键删除</div>
-                <div slot="slipbtns" class="slipbtns"><a href="javascript:;">删除</a></div>
+            <nut-leftslip onlyDel @oneDelete="oneDel" ref="leftslip1">
+                <div slot="slip-main" class="slip-main">向左滑滑滑~一键删除</div>
             </nut-leftslip>
         </div>
         <p>多个按钮</p>
         <div>
             <nut-leftslip>
-                <div slot="slip-main" class="slip-main">
-                    {{ 111 }}
-                </div>
+                <div slot="slip-main" class="slip-main">向左滑动,多个按钮有超出限制哦~</div>
                 <div slot="slipbtns" class="slipbtns"
                     ><a href="javascript:;">删除</a>
                     <a href="javascript:;" class="favorite">收藏</a>
-                    <a href="javascript:;" class="favorite">收藏</a>
-                    <a href="javascript:;" class="favorite">收藏</a>
-                    <a href="javascript:;" class="favorite">收藏</a>
-                    <a href="javascript:;" class="favorite">收藏1</a>
+                    <a href="javascript:;" class="favorite org1"><nut-icon type="trolley" size="20px" color="#fff"></nut-icon></a>
+                    <a href="javascript:;" class="favorite org2"><nut-icon type="cross" size="15px" color="#fff"></nut-icon></a>
+                    <a href="javascript:;" class="favorite org3">确认</a>
+                    <a href="javascript:;" class="favorite org1">加购物车</a>
                     <a href="javascript:;" class="favorite">收藏2</a>
                     <a href="javascript:;" class="favorite">收藏3</a>
-                    <a href="javascript:;" class="favorite">收藏4</a>
                 </div>
             </nut-leftslip>
         </div>
         <p>列表</p>
         <div>
-            <nut-leftslip v-for="(item, index) in list" :key="index">
+            <nut-leftslip v-for="(item, index) in list" :key="item.id" ref="leftslip">
                 <div slot="slip-main" class="slip-main">
                     <div class="addr">
                         <p class="name-mobile">{{ item.tel }}</p>
@@ -61,26 +59,30 @@ export default {
     data() {
         return {
             list: [
-                {addr: '北京市大兴区亦庄经济开发中心京东大厦B座1', tel: '159****8888'},
-                {addr: '北京市大兴区亦庄经济开发中心京东大厦B座2', tel: '159****8888'},
-                {addr: '北京市大兴区亦庄经济开发中心京东大厦B座3', tel: '159****8888'},
-                {addr: '北京市大兴区亦庄经济开发中心京东大厦B座4', tel: '159****8888'},
-                {addr: '北京市大兴区亦庄经济开发中心京东大厦B座5', tel: '159****8888'},
-                {addr: '北京市大兴区亦庄经济开发中心京东大厦B座6', tel: '159****8888'},
-                {addr: '北京市大兴区亦庄经济开发中心京东大厦B座7', tel: '159****8888'},
-                {addr: '北京市大兴区亦庄经济开发中心京东大厦B座8', tel: '159****8888'}
+                {id: 'add1', addr: '北京市大兴区亦庄经济开发中心京东大厦B座1', tel: '159****8888'},
+                {id: 'add2', addr: '北京市大兴区亦庄经济开发中心京东大厦B座2', tel: '159****8888'},
+                {id: 'add3', addr: '北京市大兴区亦庄经济开发中心京东大厦B座3', tel: '159****8888'},
+                {id: 'add4', addr: '北京市大兴区亦庄经济开发中心京东大厦B座4', tel: '159****8888'},
+                {id: 'add5', addr: '北京市大兴区亦庄经济开发中心京东大厦B座5', tel: '159****8888'},
+                {id: 'add6', addr: '北京市大兴区亦庄经济开发中心京东大厦B座6', tel: '159****8888'},
+                {id: 'add7', addr: '北京市大兴区亦庄经济开发中心京东大厦B座7', tel: '159****8888'},
+                {id: 'add8', addr: '北京市大兴区亦庄经济开发中心京东大厦B座8', tel: '159****8888'}
             ]
         };
     },
     methods: {
+        delSlipItem(e) {
+            console.log(e.target);
+        },
         delItem(index) {
-            console.log(1);
             this.list.splice(index, 1);
         },
-        oneDel(ev) {
-            console.log(ev.target);
-            alert('是否删除?');
-            ev.target.remove();
+        onlyDelBtnClick(par) {
+            // console.log(par);
+            par.remove();
+        },
+        oneDel(par) {
+            par.remove();
         }
     }
 };
@@ -132,6 +134,15 @@ export default {
         &.favorite {
             background: #ccc;
         }
+        &.org1 {
+            background: #ff9800;
+        }
+        &.org2 {
+            background: #ffc107;
+        }
+        &.org3 {
+            background: #ff5722;
+        }
     }
 }
 </style>

+ 78 - 21
src/packages/leftslip/doc.md

@@ -18,45 +18,102 @@
 ```html
 <div>
     <nut-leftslip>
-        <div slot="slip-main" class="slip-main">
-            {{ 222 }}
-        </div>
+        <div slot="slip-main" class="slip-main">单一按钮</div>
         <div slot="slipbtns" class="slipbtns"><a href="javascript:;">删除</a></div>
     </nut-leftslip>
 </div>
 ```
 
+### 单个按钮左滑一键删除
+
+```html
+<nut-leftslip onlyDel @oneDelete="oneDel">
+    <div slot="slip-main" class="slip-main">向左滑滑滑~一键删除</div>
+</nut-leftslip>
+```
+
+```javascript
+export default {
+    oneDel(par) {
+        par.remove();
+    }
+};
+```
+
+### 多个按钮
+
+```html
+<div>
+    <nut-leftslip>
+        <div slot="slip-main" class="slip-main">向左滑动,多个按钮有超出限制哦~</div>
+        <div slot="slipbtns" class="slipbtns"
+            ><a href="javascript:;">删除</a>
+            <a href="javascript:;" class="favorite">收藏</a>
+            <a href="javascript:;" class="favorite org1"><nut-icon type="trolley" size="20px" color="#fff"></nut-icon></a>
+            <a href="javascript:;" class="favorite org2"><nut-icon type="cross" size="15px" color="#fff"></nut-icon></a>
+            <a href="javascript:;" class="favorite org3">确认</a>
+            <a href="javascript:;" class="favorite org1">加购物车</a>
+            <a href="javascript:;" class="favorite">收藏2</a>
+            <a href="javascript:;" class="favorite">收藏3</a>
+        </div>
+    </nut-leftslip>
+</div>
+```
+
 ### 列表
 
 ```html
-<nut-leftslip @slide-left="slideLeft" @slide-right="slideRight" @slide-no="slideNo" during="0.2">
-    <div slot="slip-main" class="slip-main">
-        <div class="addr">
-            <p class="name-mobile">159****8888</p>
-            <p class="full-addr">北京市大兴区亦庄经济开发中心京东大厦B座</p>
+<div>
+    <nut-leftslip v-for="(item, index) in list" :key="item.id" ref="leftslip">
+        <div slot="slip-main" class="slip-main">
+            <div class="addr">
+                <p class="name-mobile">159****8888</p>
+                <p class="full-addr">北京市大兴区亦庄经济开发中心京东大厦B座1</p>
+            </div>
+            <a class="addr-edit" href="javascript:void(0)"></a>
         </div>
-        <a class="addr-edit" href="javascript:void(0)"></a>
-    </div>
-    <div slot="slipbtns" class="slipbtns"> <a href="javascript:;">删除</a><a href="javascript:;">收藏</a> </div>
-</nut-leftslip>
+        <div slot="slipbtns" class="slipbtns"
+            ><a href="javascript:;" @click="delItem(index)">删除</a><a href="javascript:;" class="favorite">收藏</a></div
+        >
+    </nut-leftslip>
+</div>
 ```
 
 ```javascript
 export default {
     components: {},
     data() {
-        return {};
+        return {
+            list: [
+                {id: 'add1', addr: '北京市大兴区亦庄经济开发中心京东大厦B座1', tel: '159****8888'},
+                {id: 'add2', addr: '北京市大兴区亦庄经济开发中心京东大厦B座2', tel: '159****8888'},
+                {id: 'add3', addr: '北京市大兴区亦庄经济开发中心京东大厦B座3', tel: '159****8888'},
+                {id: 'add4', addr: '北京市大兴区亦庄经济开发中心京东大厦B座4', tel: '159****8888'},
+                {id: 'add5', addr: '北京市大兴区亦庄经济开发中心京东大厦B座5', tel: '159****8888'},
+                {id: 'add6', addr: '北京市大兴区亦庄经济开发中心京东大厦B座6', tel: '159****8888'},
+                {id: 'add7', addr: '北京市大兴区亦庄经济开发中心京东大厦B座7', tel: '159****8888'},
+                {id: 'add8', addr: '北京市大兴区亦庄经济开发中心京东大厦B座8', tel: '159****8888'}
+            ]
+        };
     },
     methods: {
-        slideLeft() {
-            console.log('左划了');
-        },
-        slideRight() {
-            console.log('右划了');
-        },
-        slideNo() {
-            console.log('没有划动');
+        delItem(index) {
+            this.list.splice(index, 1);
         }
     }
 };
 ```
+
+## Prop
+
+| 字段           | 说明                                           | 类型    | 默认值 |
+| -------------- | ---------------------------------------------- | ------- | ------ |
+| slot:slip-main | 列表主内容自定义区域                           | html    | -      |
+| slot:slipbtns  | 左滑按钮自定义区域                             | html    | -      |
+| onlyDel        | 显示只有一个删除按钮的列表样式(支持一键删除) | Boolean | false  |
+
+## Event
+
+| 字段      | 说明                       | 回调参数 |
+| --------- | -------------------------- | -------- |
+| oneDelete | 单一删除按钮模式下删除事件 | 无       |

+ 10 - 4
src/packages/leftslip/leftslip.scss

@@ -17,9 +17,9 @@
     }
     .delbtn{
         position: absolute;
-        right: -80px;
+        right: -50px;
         top: 0;
-        width: 40px;
+        min-width: 40px;
         height: 100%;
         display: flex;
         align-items: center;
@@ -31,7 +31,13 @@
         font-size: 14px;
         span{
             // width: 40px;
-            display: block;
+            display: flex;
+            position: absolute;
+            right: 0;
+            width: 50px;
+            align-items: center;
+            justify-content: center;
+            height: 100%;
         }
     }
     .slipbtns {
@@ -44,7 +50,6 @@
         align-items: center;
         justify-content: center;
         transform: translateX(100%);
-        
         a {
             display: flex;
             width: 40px;
@@ -55,6 +60,7 @@
             font-size: 14px;
             align-items: center;
             justify-content: center;
+            text-align: center;
         }
     }
 }

+ 45 - 49
src/packages/leftslip/leftslip.vue

@@ -4,10 +4,13 @@
             <div @touchstart="touchStart($event)" @touchmove="touchMove($event)" @touchend="touchEnd($event)">
                 <slot name="slip-main"></slot>
             </div>
-            <div>
-                <!-- <div>删除</div> -->
-                <div v-if="onlyDel" :style="delBtnStyle" @click="handleClick" class="delbtn" ref="delBtn"><span>删除</span></div>
-                <slot name="slipbtns" v-else @click="handleClick"></slot>
+
+            <div v-if="onlyDel" class="delbtn" ref="delBtn"
+                ><div :style="delBtnStyle" class="trans"></div><span @click.prevent="onlyDelClick($event)">删除</span></div
+            >
+            <div v-else>
+                <!-- <a @click.prevent="onlyDelClick($event)">删除</a> -->
+                <slot name="slipbtns"></slot>
             </div>
         </div>
     </div>
@@ -16,18 +19,6 @@
 export default {
     name: 'nut-leftslip',
     props: {
-        during: {
-            type: [Number, String],
-            default: 1
-        },
-        isClickRestore: {
-            type: [Boolean],
-            default: true
-        },
-        customClass: {
-            type: String,
-            default: ''
-        },
         onlyDel: {
             type: [Boolean],
             default: false
@@ -55,6 +46,11 @@ export default {
                 this.buttonWidth = this.buttonWidth + slot.elm.offsetWidth;
             }
         });
+        var that = this;
+        this.$on('bridge', () => {
+            that.restSlide();
+        }); //设置接收父组件的方法
+
         window.addEventListener('scroll', this.handleScroll, true);
     },
     beforeDestroy() {
@@ -68,7 +64,12 @@ export default {
             }
             // this.restSlide();
         },
-        handleClick(v) {
+        handleClick() {
+            this.restSlide();
+        },
+        onlyDelClick() {
+            // this.$emit('onlyDelBtnClick', this.$refs.slipItem);
+            this.$emit('oneDelete', this.$refs.slipItem);
             this.restSlide();
         },
         touchStart(e) {
@@ -99,28 +100,21 @@ export default {
                     this.disX = this.startX - this.moveX;
                     // console.log(this.disX);
                     if (this.onlyDel) {
-                        //一键删除
-                        this.deleteSlider = 'transform:translateX(-' + this.disX + 'px)';
-                        this.delBtnStyle = 'width:' + this.disX + 'px;right:-' + this.disX + 'px';
-                        if (this.disX < wd || this.disX == 0) {
+                        //单一删除,左滑一键删除
+                        if (this.disX < 0 || this.disX == 0) {
                             this.deleteSlider = 'transform:translateX(0px)';
-                            this.delBtnStyle = 'width:40px;right:-0px';
-                        } else {
-                            this.deleteSlider = 'transform:translateX(-' + this.disX + 'px)';
-                            this.delBtnStyle = 'width:' + this.disX + 'px;right:-' + this.disX + 'px';
-                            if (this.disX > itemWd - 20) {
-                                this.deleteSlider = 'transform:translateX(-' + itemWd + 'px)';
-                                this.delBtnStyle = 'width:' + itemWd + 'px;right:-' + itemWd + 'px';
-                                // alert(111);
-                            }
+                            // parentElement.dataset.type = 0;
+                            // 大于0,表示左滑了,此时滑块开始滑动
                         }
+                        this.deleteSlider = 'transform:translateX(-' + this.disX + 'px)';
+                        this.delBtnStyle = 'width:' + this.disX + 'px';
                     } else {
                         // 如果是向右滑动或者不滑动,不改变滑块的位置
-                        if (this.disX < wd / 3 || this.disX == 0) {
+                        if (this.disX < wd / 4 || this.disX == 0) {
                             this.deleteSlider = 'transform:translateX(0px)';
                             // parentElement.dataset.type = 0;
                             // 大于0,表示左滑了,此时滑块开始滑动
-                        } else if (this.disX > wd / 3) {
+                        } else if (this.disX > wd / 4) {
                             //具体滑动距离我取的是 手指偏移距离*5。
                             // parentElement.dataset.type = 1;
                             this.deleteSlider = 'transform:translateX(-' + this.disX + 'px)';
@@ -149,27 +143,28 @@ export default {
                 if (Math.abs(this.startY - endY) < 40) {
                     let endX = e.changedTouches[0].clientX;
                     this.disX = this.startX - endX;
-                    console.log('touchEndthis.disX:', this.disX);
+                    // console.log('touchEndthis.disX:', this.disX);
                     if (this.onlyDel) {
-                        // this.deleteSlider = 'transform:translateX(-' + this.disX + 'px)';
-                        // this.delBtnStyle = 'width:' + this.disX + 'px;right:-' + this.disX + 'px';
-                        if (this.disX < wd) {
-                            // parentElement.dataset.type = 0;
+                        //单一按钮,左滑一键删除
+                        if (this.disX < 0 || this.disX == 0) {
                             this.deleteSlider = 'transform:translateX(0px)';
-                            this.delBtnStyle = 'width:40px;right:-0px';
+                            // parentElement.dataset.type = 0;
+                            // 大于0,表示左滑了,此时滑块开始滑动
+                        } else if (this.disX < itemWd - 20) {
+                            // parentElement.dataset.type = 0;
+                            this.deleteSlider = 'transform:translateX(-50px);';
+                            this.delBtnStyle = ' width:0px;';
                         } else {
-                            this.deleteSlider = 'transform:translateX(-' + this.disX + 'px)';
-                            this.delBtnStyle = 'width:' + this.disX + 'px;right:-' + this.disX + 'px';
-                            if (this.disX > itemWd - 20) {
-                                this.deleteSlider = 'transform:translateX(-' + itemWd + 'px)';
-                                this.delBtnStyle = 'width:' + itemWd + 'px;right:-' + itemWd + 'px';
-                                this.$emit('oneDelete', e);
-                            }
+                            this.deleteSlider = 'transform:translateX(-' + itemWd + 'px);';
+                            this.delBtnStyle = ' width:' + itemWd + 'px;';
+                            // this.$emit('oneDelete', this.$refs.slipItem);
+                            // this.restSlide();
+                            this.onlyDelClick();
                         }
                     } else {
-                        //如果距离小于删除按钮一,强行回到起点
+                        //如果距离小于删除按钮的四分之一,强行回到起点
 
-                        if (this.disX < wd / 3) {
+                        if (this.disX < wd / 4) {
                             // parentElement.dataset.type = 0;
                             this.deleteSlider = 'transform:translateX(0px)';
                         } else {
@@ -190,8 +185,8 @@ export default {
         },
         restSlide() {
             let listItems = document.querySelectorAll('.leftslip-item');
-            let delBtns = document.querySelectorAll('.delbtn');
-            console.log(delBtns);
+            let delBtns = document.querySelectorAll('.delbtn .trans');
+            // console.log(delBtns);
             // 复位
             for (let i = 0; i < listItems.length; i++) {
                 listItems[i].style = 'transform:translateX(0' + 'px)';
@@ -199,6 +194,7 @@ export default {
             for (let j = 0; j < delBtns.length; j++) {
                 delBtns[j].style = '';
             }
+
             // this.delBtnStyle = '';
         }
     }