{"version":3,"file":"winkong-ng-zorro-antd-extension-jigsaw.mjs","sources":["../../../components/jigsaw/jigsaw.component.ts","../../../components/jigsaw/jigsaw.component.html","../../../components/jigsaw/jigsaw.module.ts","../../../components/jigsaw/public-api.ts","../../../components/jigsaw/winkong-ng-zorro-antd-extension-jigsaw.ts"],"sourcesContent":["import {\r\n  AfterViewInit,\r\n  ChangeDetectionStrategy,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\n\r\nconst l = 42; // 滑块边长\r\nconst r = 9; // 滑块半径\r\nconst PI = Math.PI;\r\nconst L = l + r * 2 + 3; // 滑块实际边长\r\n\r\n@Component({\r\n  selector: 'nzx-jigsaw',\r\n  templateUrl: './jigsaw.component.html',\r\n  styleUrls: ['./jigsaw.component.less'],\r\n  changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NzxJigsawComponent implements AfterViewInit {\r\n  @Input() width = 310;\r\n  @Input() height = 155;\r\n  @Input() nzxLoadingText = '加载中...';\r\n  @Input() nzxTipText = '向右滑动填充拼图';\r\n  @Input() nzxBgImgUrl: string | string[] = '';\r\n\r\n  @Output() nzxOnRefresh = new EventEmitter<void>();\r\n  @Output() nzxOnSuccess = new EventEmitter<void>();\r\n  @Output() nzxOnFail = new EventEmitter<void>();\r\n\r\n  isLoading = false;\r\n\r\n  @ViewChild('canvasCtx')\r\n  private canvasRef!: ElementRef<HTMLCanvasElement>;\r\n\r\n  @ViewChild('blockCtx')\r\n  private blockRef!: ElementRef<HTMLCanvasElement>;\r\n\r\n  @ViewChild('sliderContainer')\r\n  private sliderContainerRef!: ElementRef<HTMLDivElement>;\r\n\r\n  @ViewChild('slider')\r\n  private sliderRef!: ElementRef<HTMLDivElement>;\r\n\r\n  @ViewChild('sliderMask')\r\n  private sliderMaskRef!: ElementRef<HTMLDivElement>;\r\n\r\n  private img: any;\r\n  private x: number = 0;\r\n  private y: number = 0;\r\n\r\n  private originX: number = 0;\r\n  private originY: number = 0;\r\n  private trail: any[] = [];\r\n  private isMouseDown = false;\r\n\r\n  constructor(private cd: ChangeDetectorRef) {}\r\n\r\n  ngAfterViewInit(): void {\r\n    this.initImg();\r\n\r\n    const handleDragMove = (e: any) => {\r\n      if (!this.isMouseDown) {\r\n        return false;\r\n      }\r\n      e.preventDefault();\r\n      const eventX = e.clientX || e.touches[0].clientX;\r\n      const eventY = e.clientY || e.touches[0].clientY;\r\n      const moveX = eventX - this.originX;\r\n      const moveY = eventY - this.originY;\r\n      if (moveX < 0 || moveX + 38 >= this.width) return false;\r\n      this.sliderRef.nativeElement.style.left = moveX + 'px';\r\n      const blockLeft = ((this.width - 40 - 20) / (this.width - 40)) * moveX;\r\n      this.blockRef.nativeElement.style.left = blockLeft + 'px';\r\n      this.sliderContainerRef.nativeElement.classList.add(\r\n        'nzx-jigsaw-slider-container-active'\r\n      );\r\n      this.sliderMaskRef.nativeElement.style.width = moveX + 'px';\r\n      this.trail.push(moveY);\r\n      return false;\r\n    };\r\n\r\n    const handleDragEnd = (e: any) => {\r\n      if (!this.isMouseDown) {\r\n        return false;\r\n      }\r\n      this.isMouseDown = false;\r\n      const eventX = e.clientX || e.changedTouches[0].clientX;\r\n      if (eventX === this.originX) {\r\n        return false;\r\n      }\r\n      this.sliderContainerRef.nativeElement.classList.remove(\r\n        'nzx-jigsaw-slider-container-active'\r\n      );\r\n      this.trail = this.trail;\r\n      const { spliced, verified } = this.verify();\r\n\r\n      if (spliced) {\r\n        if (verified) {\r\n          this.sliderContainerRef.nativeElement.classList.add(\r\n            'nzx-jigsaw-slider-container-success'\r\n          );\r\n          this.nzxOnSuccess.emit();\r\n        } else {\r\n          this.sliderContainerRef.nativeElement.classList.add(\r\n            'nzx-jigsaw-slider-container-fail'\r\n          );\r\n          this.nzxTipText = '请再试一次';\r\n          this.reset();\r\n        }\r\n      } else {\r\n        this.sliderContainerRef.nativeElement.classList.add(\r\n          'nzx-jigsaw-slider-container-fail'\r\n        );\r\n        this.nzxOnFail.emit();\r\n        setTimeout(() => this.reset(), 1000);\r\n      }\r\n      return false;\r\n    };\r\n\r\n    document.addEventListener('mousemove', handleDragMove);\r\n    document.addEventListener('touchmove', handleDragMove);\r\n    document.addEventListener('mouseup', handleDragEnd);\r\n    document.addEventListener('touchend', handleDragEnd);\r\n  }\r\n\r\n  selectstart() {\r\n    return false;\r\n  }\r\n\r\n  refresh() {\r\n    this.reset();\r\n    this.nzxOnRefresh.emit();\r\n  }\r\n\r\n  handleDragStart(e: any) {\r\n    this.originX = e.clientX || e.touches[0].clientX;\r\n    this.originY = e.clientY || e.touches[0].clientY;\r\n    this.isMouseDown = true;\r\n  }\r\n\r\n  private verify() {\r\n    const arr = this.trail; // 拖动时y轴的移动距离\r\n    const average = arr.reduce((x: number, y: number) => x + y) / arr.length;\r\n    const deviations = arr.map((x) => x - average);\r\n    const stddev = Math.sqrt(\r\n      deviations\r\n        .map((x: number) => x * x)\r\n        .reduce((x: number, y: number) => x + y) / arr.length\r\n    );\r\n    const left = parseInt(this.blockRef.nativeElement.style.left);\r\n    return {\r\n      spliced: Math.abs(left - this.x) < 10,\r\n      verified: stddev !== 0, // 简单验证拖动轨迹，为零时表示Y轴上下没有波动，可能非人为操作\r\n    };\r\n  }\r\n\r\n  private reset() {\r\n    const { width, height } = this;\r\n    // 重置样式\r\n    this.sliderContainerRef.nativeElement.className =\r\n      'nzx-jigsaw-slider-container';\r\n    this.sliderRef.nativeElement.style.left = 0 + 'px';\r\n    this.blockRef.nativeElement.width = width;\r\n    this.blockRef.nativeElement.style.left = 0 + 'px';\r\n    this.sliderMaskRef.nativeElement.style.width = 0 + 'px';\r\n\r\n    // 清空画布\r\n    this.canvasRef.nativeElement\r\n      .getContext('2d')!\r\n      .clearRect(0, 0, width, height);\r\n    this.blockRef.nativeElement\r\n      .getContext('2d')!\r\n      .clearRect(0, 0, width, height);\r\n\r\n    // 重新加载图片\r\n    this.isLoading = true;\r\n    this.cd.markForCheck();\r\n    this.setImageSrc(this.getRandomImgSrc(), this.img);\r\n  }\r\n\r\n  private initImg() {\r\n    const img: HTMLImageElement = new Image();\r\n    img.style.objectFit = 'cover';\r\n    img.crossOrigin = 'Anonymous';\r\n    img.onload = () => {\r\n      this.isLoading = false;\r\n      this.draw(img);\r\n    };\r\n    img.onerror = () => {\r\n      // 图片加载失败的时候重新加载其他图片\r\n      this.setImageSrc(this.getRandomImgSrc(), img);\r\n    };\r\n    this.setImageSrc(this.getRandomImgSrc(), img);\r\n    this.img = img;\r\n  }\r\n\r\n  private draw(img: HTMLImageElement) {\r\n    const { width, height } = this;\r\n    // 随机位置创建拼图形状\r\n    this.x = this.getRandomNumberByRange(L + 10, width - (L + 10));\r\n    this.y = this.getRandomNumberByRange(10 + r * 2, height - (L + 10));\r\n    this.drawPath(\r\n      this.canvasRef.nativeElement.getContext('2d')!,\r\n      this.x,\r\n      this.y,\r\n      'fill'\r\n    );\r\n    this.drawPath(\r\n      this.blockRef.nativeElement.getContext('2d')!,\r\n      this.x,\r\n      this.y,\r\n      'clip'\r\n    );\r\n\r\n    // 画入图片\r\n    this.canvasRef.nativeElement\r\n      .getContext('2d')!\r\n      .drawImage(img, 0, 0, width, height);\r\n    this.blockRef.nativeElement\r\n      .getContext('2d')!\r\n      .drawImage(img, 0, 0, width, height);\r\n\r\n    // 提取滑块并放到最左边\r\n    const y = this.y - r * 2 - 1;\r\n    const ImageData = this.blockRef.nativeElement\r\n      .getContext('2d')!\r\n      .getImageData(this.x - 3, y, L, L);\r\n    this.blockRef.nativeElement!.width = L;\r\n    this.blockRef.nativeElement.getContext('2d')!.putImageData(ImageData, 0, y);\r\n    this.cd.markForCheck();\r\n  }\r\n\r\n  private setImageSrc(src: string, img: HTMLImageElement) {\r\n    const isIE = window.navigator.userAgent.indexOf('Trident') > -1;\r\n    if (isIE) {\r\n      // IE浏览器无法通过img.crossOrigin跨域，使用ajax获取图片blob然后转为dataURL显示\r\n      const xhr = new XMLHttpRequest();\r\n      xhr.onloadend = (e: any) => {\r\n        const file = new FileReader(); // FileReader仅支持IE10+\r\n        file.readAsDataURL(e.target.response);\r\n        file.onloadend = (e) => {\r\n          img.src = e.target?.result as string;\r\n        };\r\n      };\r\n      xhr.open('GET', src);\r\n      xhr.responseType = 'blob';\r\n      xhr.send();\r\n    } else {\r\n      img.src = src;\r\n    }\r\n  }\r\n\r\n  private getRandomImgSrc() {\r\n    if (this.nzxBgImgUrl && typeof this.nzxBgImgUrl == 'string') {\r\n      return this.nzxBgImgUrl;\r\n    }\r\n\r\n    if (\r\n      this.nzxBgImgUrl &&\r\n      Array.isArray(this.nzxBgImgUrl) &&\r\n      this.nzxBgImgUrl.length\r\n    ) {\r\n      return this.nzxBgImgUrl[\r\n        this.getRandomNumberByRange(0, this.nzxBgImgUrl.length - 1)\r\n      ];\r\n    }\r\n    return `https://picsum.photos/id/${this.getRandomNumberByRange(0, 1084)}/${\r\n      this.width\r\n    }/${this.height}`;\r\n  }\r\n\r\n  private getRandomNumberByRange(start: number, end: number) {\r\n    return Math.round(Math.random() * (end - start) + start);\r\n  }\r\n\r\n  private drawPath(\r\n    ctx: CanvasRenderingContext2D,\r\n    x: number,\r\n    y: number,\r\n    operation: any\r\n  ) {\r\n    ctx.beginPath();\r\n    ctx.moveTo(x, y);\r\n    ctx.arc(x + l / 2, y - r + 2, r, 0.72 * PI, 2.26 * PI);\r\n    ctx.lineTo(x + l, y);\r\n    ctx.arc(x + l + r - 2, y + l / 2, r, 1.21 * PI, 2.78 * PI);\r\n    ctx.lineTo(x + l, y + l);\r\n    ctx.lineTo(x, y + l);\r\n    ctx.arc(x + r - 2, y + l / 2, r + 0.4, 2.76 * PI, 1.24 * PI, true);\r\n    ctx.lineTo(x, y);\r\n    ctx.lineWidth = 2;\r\n    ctx.fillStyle = 'rgba(255, 255, 255, 0.7)';\r\n    ctx.strokeStyle = 'rgba(255, 255, 255, 0.7)';\r\n    ctx.stroke();\r\n    ctx.globalCompositeOperation = 'destination-over';\r\n    operation === 'fill' ? ctx.fill() : ctx.clip();\r\n  }\r\n}\r\n","<div\r\n  class=\"nzx-jigsaw-container\"\r\n  [ngStyle]=\"{\r\n    width: width + 'px'\r\n  }\"\r\n  (selectstart)=\"selectstart()\"\r\n>\r\n  <div\r\n    class=\"nzx-jigsaw-loading-container\"\r\n    [ngStyle]=\"{\r\n      display: isLoading ? '' : 'none',\r\n      width: width + 'px',\r\n      height: height + 'px'\r\n    }\"\r\n  >\r\n    <span class=\"nzx-jigsaw-loading-icon\" nz-icon [nzType]=\"'loading'\"></span>\r\n    <span>{{ nzxLoadingText }}</span>\r\n  </div>\r\n\r\n  <canvas #canvasCtx [width]=\"width\" [height]=\"height\"></canvas>\r\n\r\n  <span\r\n    class=\"nzx-jigsaw-refresh-icon\"\r\n    nz-icon\r\n    nzType=\"redo\"\r\n    nzTheme=\"outline\"\r\n    [nzRotate]=\"-80\"\r\n    (click)=\"refresh()\"\r\n  ></span>\r\n\r\n  <canvas\r\n    #blockCtx\r\n    class=\"nzx-jigsaw-block\"\r\n    [width]=\"width\"\r\n    [height]=\"height\"\r\n    (touchstart)=\"handleDragStart($event)\"\r\n    (mousedown)=\"handleDragStart($event)\"\r\n  ></canvas>\r\n\r\n  <div\r\n    #sliderContainer\r\n    class=\"nzx-jigsaw-slider-container\"\r\n    [ngStyle]=\"{\r\n      width: width + 'px',\r\n      'pointer-events': isLoading ? 'none' : ''\r\n    }\"\r\n  >\r\n    <div #sliderMask class=\"nzx-jigsaw-slider-mask\">\r\n      <div\r\n        #slider\r\n        class=\"nzx-jigsaw-slider\"\r\n        (touchstart)=\"handleDragStart($event)\"\r\n        (mousedown)=\"handleDragStart($event)\"\r\n      >\r\n        <span nz-icon nzType=\"arrow-right\" nzTheme=\"outline\"></span>\r\n      </div>\r\n    </div>\r\n    <span class=\"nzx-jigsaw-slider-text\">{{ nzxTipText }}</span>\r\n  </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { NzxJigsawComponent } from './jigsaw.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NzIconModule } from '@winkong/ng-zorro-antd/icon';\r\n\r\n@NgModule({\r\n  imports: [CommonModule, NzIconModule],\r\n  declarations: [NzxJigsawComponent],\r\n  exports: [NzxJigsawComponent],\r\n})\r\nexport class NzxJigsawModule {}\r\n","/**\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE\n */\n\nexport * from './jigsaw.module';\nexport * from './jigsaw.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}