add Path.app style menu button
This commit is contained in:
parent
ff6a2c9aad
commit
d987acb6d9
156
doric-demo/src/PathButtonDemo.ts
Normal file
156
doric-demo/src/PathButtonDemo.ts
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
import { Panel, Group, LayoutSpec, layoutConfig, Color, vlayout, gravity, text, Gravity, animate, View, modal, stack } from "doric"
|
||||||
|
import { colors } from "./utils"
|
||||||
|
|
||||||
|
@Entry
|
||||||
|
class PathButtonDemo extends Panel {
|
||||||
|
|
||||||
|
collapse: boolean = false
|
||||||
|
dock?: View
|
||||||
|
menu1?: View
|
||||||
|
menu2?: View
|
||||||
|
menu3?: View
|
||||||
|
menu4?: View
|
||||||
|
|
||||||
|
build(root: Group) {
|
||||||
|
let clockWise = async () => {
|
||||||
|
this.menu1?.let((it) => {
|
||||||
|
it.scaleX = 0
|
||||||
|
it.scaleY = 0
|
||||||
|
})
|
||||||
|
this.menu2?.let((it) => {
|
||||||
|
it.scaleX = 0
|
||||||
|
it.scaleY = 0
|
||||||
|
})
|
||||||
|
this.menu3?.let((it) => {
|
||||||
|
it.scaleX = 0
|
||||||
|
it.scaleY = 0
|
||||||
|
})
|
||||||
|
this.menu4?.let((it) => {
|
||||||
|
it.scaleX = 0
|
||||||
|
it.scaleY = 0
|
||||||
|
})
|
||||||
|
await animate(context)({
|
||||||
|
animations: () => {
|
||||||
|
this.dock?.let((it) => {it.rotation = 0.5})
|
||||||
|
this.menu1?.let((it) => {
|
||||||
|
it.translationX = -150
|
||||||
|
it.scaleX = 1
|
||||||
|
it.scaleY = 1
|
||||||
|
})
|
||||||
|
this.menu2?.let((it) => {
|
||||||
|
it.translationY = -150
|
||||||
|
it.scaleX = 1
|
||||||
|
it.scaleY = 1
|
||||||
|
})
|
||||||
|
this.menu3?.let((it) => {
|
||||||
|
it.translationX = -150 * Math.cos(1/6 * Math.PI)
|
||||||
|
it.translationY = -150 * Math.sin(1/6 * Math.PI)
|
||||||
|
it.scaleX = 1
|
||||||
|
it.scaleY = 1
|
||||||
|
})
|
||||||
|
this.menu4?.let((it) => {
|
||||||
|
it.translationX = -150 * Math.cos(1/3 * Math.PI)
|
||||||
|
it.translationY = -150 * Math.sin(1/3 * Math.PI)
|
||||||
|
it.scaleX = 1
|
||||||
|
it.scaleY = 1
|
||||||
|
})
|
||||||
|
},
|
||||||
|
duration: 300,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
let antiClockWise = async () => {
|
||||||
|
await animate(context)({
|
||||||
|
animations: () => {
|
||||||
|
this.dock?.let((it) => {it.rotation = 0})
|
||||||
|
this.menu1?.let((it) => {
|
||||||
|
it.translationX = 0
|
||||||
|
it.scaleX = 0
|
||||||
|
it.scaleY = 0
|
||||||
|
})
|
||||||
|
this.menu2?.let((it) => {
|
||||||
|
it.translationY = 0
|
||||||
|
it.scaleX = 0
|
||||||
|
it.scaleY = 0
|
||||||
|
})
|
||||||
|
this.menu3?.let((it) => {
|
||||||
|
it.translationX = 0
|
||||||
|
it.translationY = 0
|
||||||
|
it.scaleX = 0
|
||||||
|
it.scaleY = 0
|
||||||
|
})
|
||||||
|
this.menu4?.let((it) => {
|
||||||
|
it.translationX = 0
|
||||||
|
it.translationY = 0
|
||||||
|
it.scaleX = 0
|
||||||
|
it.scaleY = 0
|
||||||
|
})
|
||||||
|
},
|
||||||
|
duration: 300,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
stack([
|
||||||
|
this.menu1 = stack([], {
|
||||||
|
width: 50,
|
||||||
|
height: 50,
|
||||||
|
layoutConfig: layoutConfig().just(),
|
||||||
|
corners: 25,
|
||||||
|
backgroundColor: Color.RED,
|
||||||
|
x: Environment.screenWidth - 100,
|
||||||
|
y: Environment.screenHeight - 140,
|
||||||
|
}),
|
||||||
|
this.menu2 = stack([], {
|
||||||
|
width: 50,
|
||||||
|
height: 50,
|
||||||
|
layoutConfig: layoutConfig().just(),
|
||||||
|
corners: 25,
|
||||||
|
backgroundColor: Color.RED,
|
||||||
|
x: Environment.screenWidth - 100,
|
||||||
|
y: Environment.screenHeight - 140,
|
||||||
|
}),
|
||||||
|
this.menu3 = stack([], {
|
||||||
|
width: 50,
|
||||||
|
height: 50,
|
||||||
|
layoutConfig: layoutConfig().just(),
|
||||||
|
corners: 25,
|
||||||
|
backgroundColor: Color.RED,
|
||||||
|
x: Environment.screenWidth - 100,
|
||||||
|
y: Environment.screenHeight - 140,
|
||||||
|
}),
|
||||||
|
this.menu4 = stack([], {
|
||||||
|
width: 50,
|
||||||
|
height: 50,
|
||||||
|
layoutConfig: layoutConfig().just(),
|
||||||
|
corners: 25,
|
||||||
|
backgroundColor: Color.RED,
|
||||||
|
x: Environment.screenWidth - 100,
|
||||||
|
y: Environment.screenHeight - 140,
|
||||||
|
}),
|
||||||
|
this.dock = text({
|
||||||
|
text: '+',
|
||||||
|
textColor: Color.WHITE,
|
||||||
|
textSize: 40,
|
||||||
|
textAlignment: Gravity.Center,
|
||||||
|
layoutConfig: layoutConfig().just(),
|
||||||
|
backgroundColor: Color.RED,
|
||||||
|
corners: 25,
|
||||||
|
x: Environment.screenWidth - 100,
|
||||||
|
y: Environment.screenHeight - 140,
|
||||||
|
width: 50,
|
||||||
|
height: 50,
|
||||||
|
onClick: () => {
|
||||||
|
this.collapse = !this.collapse
|
||||||
|
if (this.collapse) {
|
||||||
|
clockWise()
|
||||||
|
} else {
|
||||||
|
antiClockWise()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
], {
|
||||||
|
backgroundColor: colors[0],
|
||||||
|
layoutConfig: layoutConfig().most(),
|
||||||
|
}).in(root)
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user