| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- <template>
- <view>
- <view :animation="animationDataContent" class="animationContent" :style="{'background-color': bgColor }" @click="rotateAndScaleThenTranslate">
- <label class="wm-icon wm-icon-gengduo1 moreIcon" v-if="moreFlag" :style="{'color': fontColor }"></label>
- <view :animation="animationData" @tap="clickAdd" class="bottom-float" :style="{'background-color': bgColor }">
- <label class="wm-icon wm-icon-add addIcon" :style="{'color': fontColor }"></label>
- </view>
- </view>
- </view>
- </template>
- <script>
- /**
- * wm-list-add 带状态的提交按钮
- * @description 一个动效的侧面添加按钮,适用于list场景,避免遮挡用户视线。
- * @property {String} bgColor 背景颜色(默认:#5094f2)
- * @property {String} fontColor 文字颜色(默认:#ffffff)
- * @property {Boolean} isOpen 默认是否关闭动画(默认:否)
- * @example
- * <wm-list-add ref="add"/>
- */
- export default {
- name: 'wm-list-add',
- props: {
- // 背景颜色
- bgColor: {
- type: String,
- default: '#5064eb'
- },
- // 文字颜色
- fontColor: {
- type: String,
- default: '#ffffff'
- },
- // 是否关闭动画
- isOpen: {
- type: Boolean,
- default: false
- },
- //列表滑动关闭动画
- isClose:{
- type: Boolean,
- default: false
- }
- },
- created() {
- this.init()
- },
- data() {
- return {
- animationData: {},
- animationDataContent: {},
- moreFlag: false,
- }
- },
- methods: {
- init() {
- if (!this.isOpen) {
- this.closeAnimation()
- }
- },
- clickAdd() {
- this.$emit('clickAdd');
- },
- // 关闭右侧添加
- closeAnimation() {
- if (this.moreFlag) return
- const animation1 = uni.createAnimation({
- duration: 500,
- timingFunction: 'ease',
- })
- const animation = uni.createAnimation({
- duration: 1000,
- timingFunction: 'ease',
- })
- this.animationDataContent = animation1
- this.animation = animation
- animation1.scale(1, 1).rotate(0).step()
- animation.scale(1, 1).rotate(90).step()
- this.animationData = animation.export()
- this.animationDataContent = animation1.export()
- console.log(this.animationData)
- setTimeout(function() {
- animation1.translate(42).step()
- animation.translate(0, -42).step()
- this.animationData = animation.export()
- this.animationDataContent = animation1.export()
- this.moreFlag = true
- }.bind(this), 1000)
- },
- // 打开右侧添加
- rotateAndScaleThenTranslate() {
- var animation1 = uni.createAnimation({
- duration: 500,
- timingFunction: 'ease',
- })
- this.animation1 = animation1
- // 先旋转,然后平移
- this.animation1.rotate(0).scale(1, 1).step()
- this.animation1.translate(0).step()
- this.animationDataContent = this.animation1.export()
- var animation = uni.createAnimation({
- duration: 1000,
- timingFunction: 'ease',
- })
- this.animation = animation
- // 先旋转,然后平移
- this.animation.rotate(-90).scale(1, 1).step()
- this.animation.translate(0, 0).step()
- this.animationData = this.animation.export()
- this.moreFlag = false
- // 5秒自动收回
- setTimeout(() => {
- this.closeAnimation()
- }, 5000)
- },
- }
- }
- </script>
- <style>
- @import url("./css/wm-icon.css");
- .animationContent {
- position: fixed;
- width: 130rpx;
- /* background-color: #5094f2; */
- height: 100rpx;
- bottom: 25%;
- right: 0;
- z-index: 10;
- border-radius: 50rpx 0 0 50rpx;
- }
- .bottom-float {
- position: absolute;
- left: 0;
- top: 0;
- width: 100rpx;
- height: 100rpx;
- border-radius: 50rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- /* background-color: #5094f2; */
- box-shadow: 0 0 20px 0px rgba(0, 0, 0, 0.1);
- transition: transform 0.4s;
- transform: translateX(0) rotate(0deg);
- color: #FFFFFF;
- }
- .moreIcon {
- position: absolute;
- line-height: 100rpx;
- left: 8rpx;
- top: 0;
- font-size: 40rpx;
- }
- .addIcon {
- font-size: 66rpx;
- }
- </style>
|