cropper.vue 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <view class="nice-cropper" :style="{height: height, width: width, background: background}" @touchstart="start" @touchmove.stop="move" @touchcancel="end" @touchend="end">
  3. <img class="nice-cropper__image" :src="src" :style="{transform: transformMeta, width: image.width + 'px', height: image.height + 'px'}" />
  4. <view class="nice-cropper__ctrls" :class="{'nice-cropper__ctrls--view' : view, 'nice-cropper__ctrls--border': showCtrlBorder, 'nice-cropper__ctrls--circle': view && circleView && maskType !== 'outline'}" :style="ctrlStyle">
  5. <view class="nice-cropper__corner nice-cropper__corner--lt" @touchstart="setCutMode('lt')" />
  6. <view class="nice-cropper__corner nice-cropper__corner--rt" @touchstart="setCutMode('rt')" />
  7. <view class="nice-cropper__corner nice-cropper__corner--rb" @touchstart="setCutMode('rb')" />
  8. <view class="nice-cropper__corner nice-cropper__corner--lb" @touchstart="setCutMode('lb')" />
  9. </view>
  10. <canvas v-if="canvasId" :id="canvasId" :canvas-id="canvasId" style="position: absolute;left:-500000px;top: -500000px" :style="{width: ctrlWidth * canvasZoom+'px', height: ctrlHeight * canvasZoom + 'px'}" />
  11. </view>
  12. </template>
  13. <script src="./cropper.js"></script>
  14. <style>
  15. .nice-cropper {
  16. position: relative;
  17. width: 100%;
  18. height: 100%;
  19. background: #000;
  20. overflow: hidden;
  21. }
  22. .nice-cropper__image {
  23. position: absolute;
  24. left: 0;
  25. top: 0;
  26. transform-origin: 50% 50%;
  27. }
  28. .nice-cropper__corner {
  29. width: 30rpx;
  30. height: 30rpx;
  31. position: absolute;
  32. }
  33. .nice-cropper__corner::after {
  34. position: absolute;
  35. left: -5px;
  36. right: -5px;
  37. bottom: -5px;
  38. top: -5px;
  39. content: '';
  40. }
  41. .nice-cropper__ctrls {
  42. position: absolute;
  43. box-shadow: inset 0 0 10rpx 0 rgba(0,0,0,.3);
  44. }
  45. .nice-cropper__ctrls--circle {
  46. border-radius: 50%;
  47. }
  48. .nice-cropper__ctrls--border {
  49. border: 2rpx solid #fff;
  50. }
  51. .nice-cropper__corner--lt {
  52. left: 0;
  53. top: 0;
  54. border-top: 4rpx solid #FFF;
  55. border-left: 4rpx solid #FFF;
  56. }
  57. .nice-cropper__corner--rt {
  58. right: 0;
  59. top: 0;
  60. border-top: 4rpx solid #FFF;
  61. border-right: 4rpx solid #FFF;
  62. }
  63. .nice-cropper__corner--rb {
  64. right: 0;
  65. bottom: 0;
  66. border-right: 4rpx solid #FFF;
  67. border-bottom: 4rpx solid #FFF;
  68. }
  69. .nice-cropper__corner--lb {
  70. left: 0;
  71. bottom: 0;
  72. border-left: 4rpx solid #FFF;
  73. border-bottom: 4rpx solid #FFF;
  74. }
  75. </style>