Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
hello uni-app x
提交
e9349ef9
H
hello uni-app x
项目概览
DCloud
/
hello uni-app x
通知
6006
Star
91
Fork
164
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
18
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
hello uni-app x
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
18
Issue
18
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
e9349ef9
编写于
8月 25, 2023
作者:
DCloud_JSON
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
优化 示例项目 drop-card y 轴的飘动动画,限制:上一个卡片动画未完成时,不能拖动下一个卡片
上级
a741ffa1
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
47 addition
and
23 deletion
+47
-23
pages/template/drop-card/drop-card.uvue
pages/template/drop-card/drop-card.uvue
+47
-23
未找到文件。
pages/template/drop-card/drop-card.uvue
浏览文件 @
e9349ef9
<template>
<template>
<view class="root">
<view class="root">
<template v-for="(item,index) in cardList" :key="index">
<template v-for="(item,index) in cardList" :key="index">
<view class="card" ref="card" @touchstart="touchstart($event as TouchEvent
,index)" @touchmove="touchmove($event as TouchEvent,index
)" @touchend="touchend" @touchcancel="touchend">
<view class="card" ref="card" @touchstart="touchstart($event as TouchEvent
)" @touchmove="touchmove($event as TouchEvent
)" @touchend="touchend" @touchcancel="touchend">
<image class="card-img" ref="card-img" :src="item"></image>
<image class="card-img" ref="card-img" :src="item"></image>
<view class="state">
<view class="state">
<image class="state-icon like" ref="state-icon-like" src="/static/template/drop-card/like.png" mode="widthFix"></image>
<image class="state-icon like" ref="state-icon-like" src="/static/template/drop-card/like.png" mode="widthFix"></image>
...
@@ -14,7 +14,9 @@
...
@@ -14,7 +14,9 @@
<script lang="ts">
<script lang="ts">
let sX : number = 0,
let sX : number = 0,
sY : number = 0,
sY : number = 0,
screenWidth : number = 1;
screenWidth : number = 1,
floating:boolean = false,
touchstartAfter:boolean = false;
export default {
export default {
data() {
data() {
...
@@ -95,18 +97,27 @@
...
@@ -95,18 +97,27 @@
}
}
}
}
},
},
touchstart(e : TouchEvent,index:number) {
touchstart(e : TouchEvent) {
if(index != this.topCardIndex){
// console.log('touchstart')
return
if(floating){
return // 浮动动画进行中
}
}
sX = e.touches[0].screenX;
sX = e.touches[0].screenX;
sY = e.touches[0].screenY;
sY = e.touches[0].screenY;
this.x = 0
this.x = 0
this.y = 0
this.y = 0
touchstartAfter = true
},
},
touchmove(e : TouchEvent,index:number) {
touchmove(e : TouchEvent) {
if(index != this.topCardIndex){
// console.log('touchmove')
return
if(!touchstartAfter){
return //
}
if(floating){
return // 浮动动画进行中
}
}
this.x += e.touches[0].screenX - sX;
this.x += e.touches[0].screenX - sX;
this.y += e.touches[0].screenY - sY;
this.y += e.touches[0].screenY - sY;
...
@@ -115,7 +126,14 @@
...
@@ -115,7 +126,14 @@
this.moveCard()
this.moveCard()
},
},
touchend() {
touchend() {
// console.log('touchend')
touchstartAfter = false
if(floating){
return // 浮动动画进行中
}
// console.log('touchend');
// console.log('touchend');
floating = true
// 设置释放之后飘走的方向 0回到坐标中心 1向右 2向左
// 设置释放之后飘走的方向 0回到坐标中心 1向右 2向左
let k:number = 0;
let k:number = 0;
...
@@ -126,7 +144,7 @@
...
@@ -126,7 +144,7 @@
}
}
this.x = k * screenWidth * 1.5
this.x = k * screenWidth * 1.5
this.y =
k * screenWidth * 0.5
this.y =
this.y * 3 * k * k
// 设置动画时间
// 设置动画时间
let transitionDuration = 300;
let transitionDuration = 300;
...
@@ -142,21 +160,27 @@
...
@@ -142,21 +160,27 @@
if(this.x != 0.0){
if(this.x != 0.0){
// 飘动的卡片挪回中心
// 飘动的卡片挪回中心
this.setINodeStyle('card',floatCardIndex,'transform', 'translate(0,0) rotate(0)')
this.setINodeStyle('card',floatCardIndex,'transform', 'translate(0,0) rotate(0) scale(0.9)')
this.setINodeStyle('card',floatCardIndex,'z-index', -1)
this.setINodeStyle('state-icon-like',floatCardIndex,'opacity', 0)
this.setINodeStyle('state-icon-like',floatCardIndex,'opacity', 0)
this.setINodeStyle('state-icon-dislike',floatCardIndex,'opacity', 0)
this.setINodeStyle('state-icon-dislike',floatCardIndex,'opacity', 0)
// 坐标归零
setTimeout(()=>{
this.x = 0
// 坐标归零
this.y = 0
this.x = 0
this.y = 0
// 动画改成marginTop,scale
this.setINodeStyle('card',floatCardIndex,'transitionProperty','marginTop,scale');
// 动画改成marginTop,scale
this.setINodeStyle('card',floatCardIndex,'transitionDuration',transitionDuration);
this.setINodeStyle('card',floatCardIndex,'transitionProperty','marginTop,scale');
// 切换卡片顺序
this.setINodeStyle('card',floatCardIndex,'transitionDuration',transitionDuration);
this.currentIndex ++
// 切换卡片顺序
// 根据最新卡片顺序,设置层级大小样式
this.currentIndex ++
this.initCardList()
// 根据最新卡片顺序,设置层级大小样式
this.initCardList()
floating = false
},0)
}else{
floating = false
}
}
},transitionDuration)
},transitionDuration)
...
@@ -181,7 +205,7 @@
...
@@ -181,7 +205,7 @@
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
background-color: #FFF;
background-color: #FFF;
/* transform-origin:bottom; */
/* transform-origin:bottom; */
transition:margin-top
6
0ms;
transition:margin-top
1
0ms;
transition-timing-function: ease-in;
transition-timing-function: ease-in;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录