diff --git a/src/components/pattern-view/pattern-view-style.ts b/src/components/pattern-view/pattern-view-style.ts
index 94fa614..8cd42e4 100644
--- a/src/components/pattern-view/pattern-view-style.ts
+++ b/src/components/pattern-view/pattern-view-style.ts
@@ -1,78 +1,47 @@
import {css, CSSResult} from 'lit'
export const sharedStyles: CSSResult = css`
- .bg {
- position: absolute;
- top: 0;
- left: 0;
- width: 100vw;
- height: 100vh;
- background-image: url(../assets/backgroud.png);
- background-repeat: no-repeat;
- background-attachment: fixed;
- background-size: cover;
- background-position: top;
+ :host {
+ --top-dir: 42.4%;
}
-
- .groundGlass {
- display: none;
- position: relative;
- margin: auto;
+ canvas {
+ display: block;
+ margin: 0 auto;
+ }
+ #content {
+ margin: 0px;
+ padding: 0px;
width: 100%;
height: 100%;
- line-height: 100%;
- color: #fff;
- font-size: 30px;
+ }
+ p {
+ position: absolute;
+ font-family: 'OPPOSans';
+ font-style: normal;
+ font-weight: 400;
+ color: #292929;
+ font-family: 'OPPOSans';
+ color: #292929;
+ font-size: 16px;
+ height: 26.5px;
+ line-height: 26.5px;
+ left: 50%;
+ width: 150px;
+ transform: translateX(-50%);
+ margin-top: 0;
text-align: center;
- overflow: hidden;
- z-index: 10;
}
-
- .bg ::before {
- content: '';
- position: absolute;
- top: -100%;
- left: -100%;
- right: -100%;
- bottom: -100%;
- background-image: url(../assets/backgroud.png);
- background-repeat: no-repeat;
- background-attachment: fixed;
- background-size: cover;
- background-position: top;
- filter: blur(10px);
- z-index: -2;
+ #canvasdown {
+ position: relative;
+ top: var(--top-dir);
}
-
- .bg ::after {
- content: '';
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- background: rgba(217, 217, 217, 0.65);
- z-index: -1;
+ .textTop {
+ top: 31%;
+ }
+ .cancel {
+ bottom: 13.5%;
+ }
+ .errorinfo {
+ top: 66%;
+ color: #ec4949;
}
- /* canvas{
- position: absolute;
- left: 0;
- top: 11%;
- right:0;
- bottom:0;
- margin:auto;
-} */
- /* #lockCancel {
- position: absolute;
- width: 50px;
- height: 30px;
- left: calc(50% - 50px/2);
- top: calc(81.5%);
- font-family: 'OPPOSans';
- font-weight: 900;
- font-size: 14px;
- line-height: 30px;
- color: #292929;
- cursor: pointer;
- user-select: none;
-} */
`
diff --git a/src/components/pattern-view/pattern-view.ts b/src/components/pattern-view/pattern-view.ts
index d16c692..b9c1497 100644
--- a/src/components/pattern-view/pattern-view.ts
+++ b/src/components/pattern-view/pattern-view.ts
@@ -1,46 +1,17 @@
-import {html, LitElement, css, PropertyValueMap} from 'lit'
+import {html, LitElement, CSSResultArray, PropertyValueMap} from 'lit'
import {customElement, property, query} from 'lit/decorators.js'
-// import {sharedStyles} from './pattern-view-style'
+import {sharedStyles} from './pattern-view-style'
@customElement('star-pattern-view')
export class StarPatternView extends LitElement {
_topDir: string = ''
_getRed: boolean = false
- static styles = css`
- :host {
- --top-dir: 217.5px;
- }
- canvas {
- margin-top: var(--top-dir);
- }
- p {
- position: absolute;
- font-family: 'OPPOSans';
- font-style: normal;
- font-weight: 400;
- color: #292929;
- font-family: 'OPPOSans';
- color: #292929;
- font-size: 20px;
- height: 26.5px;
- line-height: 26.5px;
- left: 50%;
- width: 150px;
- transform: translateX(-50%);
- margin-top: 0;
- text-align: center;
- }
- .textTop {
- top: 31%;
- }
- .cancel {
- bottom: 13.5%;
- }
- `
- // public static override get styles(): CSSResultArray {
- // return [sharedStyles]
- // }
+
+ public static override get styles(): CSSResultArray {
+ return [sharedStyles]
+ }
@query('canvas') canvas!: HTMLCanvasElement
+ @query('.textTop') saveP!: HTMLParagraphElement
@property({attribute: false}) cxt!: CanvasRenderingContext2D
@property({type: Boolean})
get getRed() {
@@ -53,15 +24,16 @@ export class StarPatternView extends LitElement {
}
}
@property({type: Boolean}) saveMode = false
+ @property({type: Boolean}) lessfour = false
@property({type: Boolean}) confirm = false
@property({type: Number}) top = 0
- @property({type: Number}) R = 35
+ @property({type: Number}) R = (35 / 600) * document.body.offsetWidth
@property({type: Number}) X = 0
@property({type: Number}) Y = 0
- @property({type: Number}) canvasWidth = document.body.offsetWidth
- @property({type: Number}) canvasHeight = document.body.offsetWidth
- @property({type: Number}) OffsetX = document.body.offsetWidth / 3.5
- @property({type: Number}) OffsetY = document.body.offsetWidth / 3.5
+ @property({type: Number}) canvasWidth = (document.body.offsetWidth * 5) / 12
+ @property({type: Number}) canvasHeight = (document.body.offsetWidth * 5) / 12
+ @property({type: Number}) OffsetX = document.body.offsetWidth / 3.33
+ @property({type: Number}) OffsetY = document.body.offsetWidth / 3.33
@property({type: Array}) circleArr: {X: number; Y: number}[] = []
@property({type: Array}) passwd: number[] = []
@property({type: Array}) savewd: number[] = []
@@ -69,6 +41,7 @@ export class StarPatternView extends LitElement {
@property({type: String}) mode = ''
@property({type: String}) changeText = ''
@property({type: String}) cancel = '取消'
+ @property({type: String}) lessfourinfo = ''
@property({type: String})
get topDir() {
return this._topDir
@@ -80,44 +53,49 @@ export class StarPatternView extends LitElement {
}
render() {
- if (this.saveMode) {
+ if (!this.saveMode) {
return html`
-
${this.changeText}
-
+
+
${this.changeText}
+
+
+
+
+ ${this.cancel}
+
+
+ `
+ } else {
+ return html`
+
+
${this.changeText}
+
+
+
+
${this.lessfourinfo}
+
`
}
- return html`
- ${this.changeText}
-
- ${this.cancel}
- `
- }
- touchStartCancel() {
- this.dispatchEvent(
- new CustomEvent('star-pattern-view-cancel', {
- detail: {
- value: true,
- },
- bubbles: true,
- composed: true,
- })
- )
}
protected firstUpdated(
_changedProperties: PropertyValueMap | Map
): void {
- this.top = this.top ? this.top : 217.5
+ //settings中,图形密码上下的文字以及图形密码的位置都有所变化
+ if (this.saveMode) {
+ this.topDir = '34.7%'
+ this.saveP.style.setProperty('top', '27.8%')
+ }
//canvas的高度和宽度都是
this.canvas.width = this.canvasWidth
this.canvas.height = this.canvasHeight
@@ -128,16 +106,6 @@ export class StarPatternView extends LitElement {
this.createCirclePoint(this.X, this.Y)
this.Draw()
this.changeText = this.saveMode ? '请绘制图案' : '绘制图案'
- // switch (this.mode) {
- // case "create":
- // this.changeText = '请绘制图案'
- // case "verify":
- // this.
- // break;
-
- // default:
- // break;
- // }
this.addEventListener('passcode-create-success', this)
this.addEventListener('passcode-verify-success', this)
this.addEventListener('passcode-verify-error', this)
@@ -153,13 +121,85 @@ export class StarPatternView extends LitElement {
break
case 'passcode-verify-error':
this.getRed = true
+ this.changeText = '绘制图案错误'
break
default:
break
}
}
+ touchStart(e: TouchEvent) {
+ this.lessfourinfo = ''
+ this.passwd = []
+ this.getRed = false
+ var touches = e.touches[0]
+ const {top, left} = this.canvas.getBoundingClientRect()
+ var X = touches.clientX - left
+ var Y = touches.clientY - top
+ this.getSelectPwd(touches, this.passwd)
+ // 清理初始canvas,不然会有叠加效果
+ this.cxt.clearRect(0, 0, this.canvasWidth, this.canvasHeight)
+ this.Draw({X, Y})
+ }
+ touchMove(e: TouchEvent) {
+ e.preventDefault()
+ var touches = e.touches[0]
+ this.getSelectPwd(touches, this.passwd)
+ // 清除画布,0,0代表从什么位置开始,canvasWidth,canvasHeight代表清除的宽度和高度
+ this.cxt = this.canvas.getContext('2d')!
+ this.cxt.clearRect(0, 0, this.canvasWidth, this.canvasHeight)
+ const {top, left} = this.canvas.getBoundingClientRect()
+ //X,Y以canvas中左上角为0,0点
+ this.Draw({
+ X: touches.clientX - left,
+ Y: touches.clientY - top,
+ })
+ }
+ touchEnd(_e: TouchEvent) {
+ console.log('###', this.passwd.length)
+ if (this.saveMode && this.passwd.length < 4) {
+ this.cxt.clearRect(0, 0, this.canvasWidth, this.canvasHeight)
+ this.getRed = true
+ this.lessfourinfo = '至少连接四个点'
+ } else {
+ this.cxt.clearRect(0, 0, this.canvasWidth, this.canvasHeight)
+ //进入存储模式
+ if (this.saveMode) {
+ this.getRed = false
+ if (!this.confirm) {
+ this.changePasswd()
+ } else {
+ this.confirmPasswd()
+ }
+ this.passwd = []
+ this.Draw()
+ } else {
+ this.dispatchEvent(
+ new CustomEvent('star-pattern-view-passwd', {
+ detail: {
+ value: this.passwd,
+ },
+ bubbles: true,
+ composed: true,
+ })
+ )
+ this.passwd = []
+ this.Draw()
+ }
+ }
+ }
+ touchStartCancel() {
+ this.dispatchEvent(
+ new CustomEvent('star-pattern-view-cancel', {
+ detail: {
+ value: true,
+ },
+ bubbles: true,
+ composed: true,
+ })
+ )
+ }
createCirclePoint(diffX: number, diffY: number) {
for (var row = 0; row < 3; row++) {
for (var col = 0; col < 3; col++) {
@@ -168,13 +208,43 @@ export class StarPatternView extends LitElement {
X: this.OffsetX + col * diffX + (col * 2 + 1) * this.R,
Y: this.OffsetY + row * diffY + (row * 2 + 1) * this.R,
}
- this.circleArr.push(Point)
+ this.circleArr.unshift(Point)
}
}
}
Draw(touchPoint?: {X: any; Y: any}) {
- if (this.passwd.length > 1) {
+ for (var i = this.circleArr.length - 1; i >= 0; i--) {
+ var Point = this.circleArr[i]
+ //大圆
+ this.cxt.beginPath()
+ this.cxt.arc(Point.X, Point.Y, this.R, 0, Math.PI * 2, true)
+ this.cxt.fillStyle = 'rgb(244,244,244,0.2)'
+ this.cxt.fill()
+ this.cxt.closePath()
+ //小圆
+ this.cxt.beginPath()
+ this.cxt.fillStyle = 'rgb(51,51,51,0.2)'
+ this.cxt.arc(Point.X, Point.Y, (36 / 140) * this.R, 0, Math.PI * 2, true)
+ this.cxt.fill()
+ this.cxt.closePath()
+ //滑动后小圆的颜色
+ if (this.passwd.indexOf(i) >= 0) {
+ this.cxt.fillStyle = this.getRed ? '#FF4040' : '#333333'
+ this.cxt.beginPath()
+ this.cxt.arc(
+ Point.X,
+ Point.Y,
+ (36 / 140) * this.R,
+ 0,
+ Math.PI * 2,
+ true
+ )
+ this.cxt.fill()
+ this.cxt.closePath()
+ }
+ }
+ if (this.passwd.length > 0) {
this.cxt.beginPath()
for (var i = 0; i < this.passwd.length; i++) {
var pointIndex = this.passwd[i]
@@ -198,40 +268,21 @@ export class StarPatternView extends LitElement {
this.cxt.closePath()
}
}
- for (var i = 0; i < this.circleArr.length; i++) {
- var Point = this.circleArr[i]
- //大圆
- this.cxt.fillStyle = 'rgb(51,51,51,0.08)'
- this.cxt.beginPath()
- this.cxt.arc(Point.X, Point.Y, this.R, 0, Math.PI * 2, true)
- this.cxt.closePath()
- this.cxt.fill()
- //小圆
- this.cxt.fillStyle = 'rgb(51,51,51,0.2)'
- this.cxt.beginPath()
- this.cxt.arc(Point.X, Point.Y, this.R - 26, 0, Math.PI * 2, true)
- this.cxt.closePath()
- this.cxt.fill()
- //滑动后小圆的颜色
- if (this.passwd.indexOf(i) >= 0) {
- this.cxt.fillStyle = this.getRed ? '#FF4040' : '#333333'
- this.cxt.beginPath()
- this.cxt.arc(Point.X, Point.Y, this.R - 26, 0, Math.PI * 2, true)
- this.cxt.closePath()
- this.cxt.fill()
- }
- }
}
+ //储存手指经过大圆后的数字
getSelectPwd(touches: any, passwd: number[]) {
for (var i = 0; i < this.circleArr.length; i++) {
var currentPoint = this.circleArr[i]
- var xdiff = Math.abs(currentPoint.X - touches.pageX)
- /******** this.top = canvas向下移动的距离 **********/
- var ydiff = Math.abs(currentPoint.Y - touches.pageY + this.top)
+ const {top, left} = this.canvas.getBoundingClientRect()
+ var X = touches.clientX - left
+ var Y = touches.clientY - top
+ var xdiff = Math.abs(currentPoint.X - X)
+ var ydiff = Math.abs(currentPoint.Y - Y)
var dir = Math.pow(xdiff * xdiff + ydiff * ydiff, 0.5)
if (dir > this.R || passwd.indexOf(i) >= 0) continue
passwd.push(i)
+ console.log(this.passwd)
break
}
}
@@ -240,7 +291,7 @@ export class StarPatternView extends LitElement {
console.log('请确认密码', this.savewd.toString())
this.confirm = true
this.changeText = '请确认图案'
- console.log('1', this.passwd)
+ console.log('###', this.passwd)
this.dispatchEvent(
new CustomEvent('star-pattern-view-settings-change', {
@@ -254,7 +305,7 @@ export class StarPatternView extends LitElement {
}
confirmPasswd() {
if (this.savewd.toString() == this.passwd.toString()) {
- console.log('2', this.passwd)
+ console.log('###', this.passwd)
this.dispatchEvent(
new CustomEvent('star-pattern-view-settings-confirm', {
detail: {
@@ -271,47 +322,4 @@ export class StarPatternView extends LitElement {
this.passwd = []
}
}
- touchStart(_e: TouchEvent) {
- this.getRed = false
- }
- touchMove(e: TouchEvent) {
- e.preventDefault()
- var touches = e.touches[0]
- this.getSelectPwd(touches, this.passwd)
- // 清除画布,0,0代表从什么位置开始,canvasWidth,canvasHeight代表清除的宽度和高度
- this.cxt = this.canvas.getContext('2d')!
- this.cxt.clearRect(0, 0, this.canvasWidth, this.canvasHeight)
- /*this.top = 手指拖动时,线条的起始位置。 */
- this.Draw({
- X: touches.pageX,
- Y: touches.pageY - this.top,
- })
- }
- touchEnd(_e: TouchEvent) {
- this.cxt.clearRect(0, 0, this.canvasWidth, this.canvasHeight)
- //进入存储模式
- if (this.saveMode) {
- this.getRed = false
- if (!this.confirm) {
- this.changePasswd()
- } else {
- this.confirmPasswd()
- }
- this.passwd = []
- this.Draw()
- } else {
- console.log('$$$', this.passwd)
- this.dispatchEvent(
- new CustomEvent('star-pattern-view-passwd', {
- detail: {
- value: this.passwd,
- },
- bubbles: true,
- composed: true,
- })
- )
- this.passwd = []
- this.Draw()
- }
- }
}
diff --git a/src/test/panels/pattern-view/pattern-view.ts b/src/test/panels/pattern-view/pattern-view.ts
index 4314c46..d281027 100644
--- a/src/test/panels/pattern-view/pattern-view.ts
+++ b/src/test/panels/pattern-view/pattern-view.ts
@@ -9,13 +9,15 @@ export class PanelPatternView extends LitElement {
position: absolute;
height: 100%;
width: 100%;
- background-color: rgb(124, 194, 235);
+ background-color: rgb(191, 198, 219);
}
`
render() {
return html`
-