Blogger Information
Blog 67
fans 0
comment 2
visits 71988
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
微信小程序自定义裁剪图片并压缩
搁浅
Original
1117 people have browsed it

wxml

  1. <view class="wx-content-info" wx:if="{{imageSrc}}">
  2. <view wx:if="{{isShowImg}}" class="wx-corpper" style="width:{{cropperInitW}}rpx;height:{{cropperInitH}}rpx;background:#000">
  3. <view class="wx-corpper-content" style="width:{{cropperW}}rpx;height:{{cropperH}}rpx;left:{{cropperL}}rpx;top:{{cropperT}}rpx">
  4. <image src="{{imageSrc}}" style="width:{{cropperW}}rpx;height:{{cropperH}}rpx"></image>
  5. <view class="wx-corpper-crop-box" bindtouchstart="contentStartMove" bindtouchmove="contentMoveing" style="width:{{cutW}}rpx;height:{{cutH}}rpx;left:{{cutL}}rpx;top:{{cutT}}rpx">
  6. <view class="wx-cropper-view-box">
  7. <view class="wx-cropper-dashed-h"></view>
  8. <view class="wx-cropper-dashed-v"></view>
  9. <view class="wx-cropper-line-t" data-drag="top" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>
  10. <view class="wx-cropper-line-r" data-drag="right" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>
  11. <view class="wx-cropper-line-b" data-drag="bottom" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>
  12. <view class="wx-cropper-line-l" data-drag="left" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>
  13. <view class="wx-cropper-point point-t" data-drag="top" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>
  14. <view class="wx-cropper-point point-tr" data-drag="topTight"></view>
  15. <view class="wx-cropper-point point-r" data-drag="right" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>
  16. <view class="wx-cropper-point point-rb" data-drag="rightBottom" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>
  17. <view class="wx-cropper-point point-b" data-drag="bottom" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>
  18. <view class="wx-cropper-point point-bl" data-drag="bottomLeft"></view>
  19. <view class="wx-cropper-point point-l" data-drag="left" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>
  20. <view class="wx-cropper-point point-lt" data-drag="leftTop"></view>
  21. </view>
  22. </view>
  23. </view>
  24. </view>
  25. <canvas canvas-id="myCanvas" style="position:absolute;border: 1px solid red; width:{{imageW}}rpx;height:{{imageH}}rpx;top:-9999px;left:-9999px;"></canvas>
  26. <view style="text-align: center;"><image style="width: 192rpx;height: 192rpx;border-radius: 500rpx !important;overflow: hidden; margin-top: 30rpx;margin-bottom: 30rpx;" src="{{returnImage}}"></image></view>
  27. <view style="display: flex;">
  28. <button type="primary" bindtap="getImageInfo">头像预览</button>
  29. <button type="primary" bindtap="upload" loading="{{isdisabled}}" disabled="{{isdisabled}}">上传头像</button>
  30. </view>
  31. </view>

js

  1. const app = getApp();
  2. // 手机的宽度
  3. var windowWRPX = 750
  4. // 拖动时候的 pageX
  5. var pageX = 0
  6. // 拖动时候的 pageY
  7. var pageY = 0
  8. var pixelRatio = wx.getSystemInfoSync().pixelRatio
  9. // 调整大小时候的 pageX
  10. var sizeConfPageX = 0
  11. // 调整大小时候的 pageY
  12. var sizeConfPageY = 0
  13. var initDragCutW = 0
  14. var initDragCutL = 0
  15. var initDragCutH = 0
  16. var initDragCutT = 0
  17. // 移动时 手势位移与 实际元素位移的比
  18. var dragScaleP = 2
  19. Page({
  20. /**
  21. * 页面的初始数据
  22. */
  23. data: {
  24. topLabel: '头像上传', //顶部栏input
  25. isIphoneX: app.globalStore.globalData.isIphoneX, //是否Iphonx
  26. windowHeight: app.globalStore.globalData.windowHeight,
  27. windowWidth: app.globalStore.globalData.windowWidth,
  28. triggered: false, //模块是否刷新中
  29. isdisabled: false, //是否提交
  30. showmodel: false, //是否编辑模式
  31. imageSrc: '',
  32. returnImage: '',
  33. isShowImg: false,
  34. // 初始化的宽高
  35. cropperInitW: windowWRPX,
  36. cropperInitH: windowWRPX,
  37. // 动态的宽高
  38. cropperW: windowWRPX,
  39. cropperH: windowWRPX,
  40. // 动态的left top值
  41. cropperL: 0,
  42. cropperT: 0,
  43. // 图片缩放值
  44. scaleP: 0,
  45. imageW: 0,
  46. imageH: 0,
  47. // 裁剪框 宽高
  48. cutW: 0,
  49. cutH: 0,
  50. cutL: 0,
  51. cutT: 0,
  52. },
  53. upload(e) { //头像上传
  54. wx.showLoading({
  55. title: '头像上传中...',
  56. })
  57. this.setData({isdisabled:true})
  58. const userinfo = wx.getStorageSync('userinfo')
  59. let encryptor = new Encrypt.JSEncrypt()
  60. encryptor.setPublicKey(publicKey);
  61. let requestkey = encryptor.encrypt(userinfo.YHBH + ',' + userinfo.OPENID + ',' + userinfo.BH + ',' + new Date().getTime()) // 加密
  62. // 将图片写入画布
  63. const ctx = wx.createCanvasContext('myCanvas')
  64. ctx.drawImage(this.data.imageSrc)
  65. ctx.draw(true, () => {
  66. // 获取画布要裁剪的位置和宽度 均为百分比 * 画布中图片的宽度 保证了在微信小程序中裁剪的图片模糊 位置不对的问题
  67. let canvasW = (this.data.cutW / this.data.cropperW) * (this.data.imageW / pixelRatio)
  68. let canvasH = (this.data.cutH / this.data.cropperH) * (this.data.imageH / pixelRatio)
  69. let canvasL = (this.data.cutL / this.data.cropperW) * (this.data.imageW / pixelRatio)
  70. let canvasT = (this.data.cutT / this.data.cropperH) * (this.data.imageH / pixelRatio)
  71. setTimeout(() => {
  72. wx.canvasToTempFilePath({
  73. x: canvasL,
  74. y: canvasT,
  75. width: canvasW,
  76. height: canvasH,
  77. destWidth: canvasW * 0.35,//设置压缩百分比,如果写100就是分辨率
  78. destHeight: canvasH * 0.35,//设置压缩百分比,如果写100就是分辨率
  79. canvasId: 'myCanvas',
  80. fileType: 'jpg',
  81. success: res => {
  82. wx.uploadFile({
  83. url: App.uploads + '/weixin/upload/img/upload/cover',
  84. filePath: res.tempFilePath,
  85. name: 'file',
  86. header: {
  87. token: requestkey
  88. },
  89. formData: {
  90. BH: wx.getStorageSync('userinfo').BH
  91. },
  92. success:res=>{
  93. res.data = JSON.parse(res.data)
  94. let pages = getCurrentPages();
  95. let previousPage = pages[pages.length - 2]; //上一个页面
  96. previousPage.setData({
  97. avatarUrl: res.data.data.filePath
  98. })
  99. const userinfo = wx.getStorageSync('userinfo')
  100. userinfo.TX = res.data.data.filePath
  101. wx.setStorageSync('userinfo', userinfo)
  102. wx.hideLoading()
  103. wx.showToast({
  104. title: '上传成功',
  105. icon: "succes",
  106. duration: 1500
  107. })
  108. this.setData({isdisabled:false})
  109. },
  110. fail:res=>{
  111. this.setData({isdisabled:false})
  112. wx.hideLoading()
  113. wx.showToast({
  114. title: '上传失败',
  115. icon: "error",
  116. duration: 1500
  117. })
  118. }
  119. })
  120. }
  121. })
  122. }, 500);
  123. })
  124. },
  125. // 拖动时候触发的touchStart事件
  126. contentStartMove(e) {
  127. pageX = e.touches[0].pageX
  128. pageY = e.touches[0].pageY
  129. },
  130. // 拖动时候触发的touchMove事件
  131. contentMoveing(e) {
  132. // this.data.cutL + (e.touches[0].pageX - pageX)
  133. // console.log(e.touches[0].pageX)
  134. // console.log(e.touches[0].pageX - pageX)
  135. var dragLengthX = (pageX - e.touches[0].pageX) * dragScaleP
  136. var dragLengthY = (pageY - e.touches[0].pageY) * dragScaleP
  137. var minX = Math.max(this.data.cutL - (dragLengthX), 0)
  138. var minY = Math.max(this.data.cutT - (dragLengthY), 0)
  139. var maxX = this.data.cropperW - this.data.cutW
  140. var maxY = this.data.cropperH - this.data.cutH
  141. this.setData({
  142. cutL: Math.min(maxX, minX),
  143. cutT: Math.min(maxY, minY),
  144. })
  145. // console.log(`${maxX} ----- ${minX}`)
  146. pageX = e.touches[0].pageX
  147. pageY = e.touches[0].pageY
  148. },
  149. // 获取图片
  150. getImageInfo() {
  151. wx.showLoading({
  152. title: '图片生成中...',
  153. })
  154. wx.downloadFile({
  155. url: this.data.imageSrc, //仅为示例,并非真实的资源
  156. success: res=>{
  157. // 将图片写入画布
  158. const ctx = wx.createCanvasContext('myCanvas')
  159. ctx.drawImage(res.tempFilePath)
  160. ctx.draw(true, () => {
  161. // 获取画布要裁剪的位置和宽度 均为百分比 * 画布中图片的宽度 保证了在微信小程序中裁剪的图片模糊 位置不对的问题
  162. let canvasW = (this.data.cutW / this.data.cropperW) * (this.data.imageW / pixelRatio)
  163. let canvasH = (this.data.cutH / this.data.cropperH) * (this.data.imageH / pixelRatio)
  164. let canvasL = (this.data.cutL / this.data.cropperW) * (this.data.imageW / pixelRatio)
  165. let canvasT = (this.data.cutT / this.data.cropperH) * (this.data.imageH / pixelRatio)
  166. setTimeout(() => {
  167. wx.canvasToTempFilePath({
  168. x: canvasL,
  169. y: canvasT,
  170. width: canvasW,
  171. height: canvasH,
  172. destWidth: canvasW * 0.35,//设置压缩百分比,如果写100就是分辨率
  173. destHeight: canvasH * 0.35,//设置压缩百分比,如果写100就是分辨率
  174. canvasId: 'myCanvas',
  175. fileType: 'jpg',
  176. success: res=>{
  177. wx.hideLoading()
  178. // wx.getImageInfo({
  179. // src: res.tempFilePath,
  180. // success (res) {
  181. // console.log(res.width)//图片宽
  182. // console.log(res.height)//图片高
  183. // }
  184. // })
  185. // 成功获得地址的地方
  186. wx.previewImage({
  187. current: '', // 当前显示图片的http链接
  188. urls: [res.tempFilePath] // 需要预览的图片http链接列表
  189. })
  190. this.setData({
  191. returnImage:res.tempFilePath
  192. })
  193. }
  194. })
  195. }, 200);
  196. })
  197. }
  198. })
  199. },
  200. // 设置大小的时候触发的touchStart事件
  201. dragStart(e) {
  202. sizeConfPageX = e.touches[0].pageX
  203. sizeConfPageY = e.touches[0].pageY
  204. initDragCutW = this.data.cutW
  205. initDragCutL = this.data.cutL
  206. initDragCutT = this.data.cutT
  207. initDragCutH = this.data.cutH
  208. },
  209. // 设置大小的时候触发的touchMove事件
  210. dragMove(e) {
  211. var dragType = e.target.dataset.drag
  212. switch (dragType) {
  213. case 'right':
  214. var dragLength = (sizeConfPageX - e.touches[0].pageX) * dragScaleP
  215. if (initDragCutW >= dragLength) {
  216. // 如果 移动小于0 说明是在往下啦 放大裁剪的高度 这样一来 图片的高度 最大 等于 图片的top值加 当前图片的高度 否则就说明超出界限
  217. if (dragLength < 0 && this.data.cropperW > initDragCutL + this.data.cutW) {
  218. this.setData({
  219. cutW: initDragCutW - dragLength
  220. })
  221. }
  222. // 如果是移动 大于0 说明在缩小 只需要缩小的距离小于原本裁剪的高度就ok
  223. if (dragLength > 0) {
  224. this.setData({
  225. cutW: initDragCutW - dragLength
  226. })
  227. } else {
  228. return
  229. }
  230. } else {
  231. return
  232. }
  233. break;
  234. case 'left':
  235. var dragLength = (dragLength = sizeConfPageX - e.touches[0].pageX) * dragScaleP
  236. console.log(dragLength)
  237. if (initDragCutW >= dragLength && initDragCutL > dragLength) {
  238. if (dragLength < 0 && Math.abs(dragLength) >= initDragCutW) return
  239. this.setData({
  240. cutL: initDragCutL - dragLength,
  241. cutW: initDragCutW + dragLength
  242. })
  243. } else {
  244. return;
  245. }
  246. break;
  247. case 'top':
  248. var dragLength = (sizeConfPageY - e.touches[0].pageY) * dragScaleP
  249. if (initDragCutH >= dragLength && initDragCutT > dragLength) {
  250. if (dragLength < 0 && Math.abs(dragLength) >= initDragCutH) return
  251. this.setData({
  252. cutT: initDragCutT - dragLength,
  253. cutH: initDragCutH + dragLength
  254. })
  255. } else {
  256. return;
  257. }
  258. break;
  259. case 'bottom':
  260. var dragLength = (sizeConfPageY - e.touches[0].pageY) * dragScaleP
  261. // console.log(this.data.cropperH > this.data.cutT + this.data.cutH)
  262. // console.log(dragLength)
  263. // console.log(initDragCutH >= dragLength)
  264. // console.log(this.data.cropperH > initDragCutT + this.data.cutH)
  265. // 必须是 dragLength 向上缩小的时候必须小于原本的高度
  266. if (initDragCutH >= dragLength) {
  267. // 如果 移动小于0 说明是在往下啦 放大裁剪的高度 这样一来 图片的高度 最大 等于 图片的top值加 当前图片的高度 否则就说明超出界限
  268. if (dragLength < 0 && this.data.cropperH > initDragCutT + this.data.cutH) {
  269. this.setData({
  270. cutH: initDragCutH - dragLength
  271. })
  272. }
  273. // 如果是移动 大于0 说明在缩小 只需要缩小的距离小于原本裁剪的高度就ok
  274. if (dragLength > 0) {
  275. this.setData({
  276. cutH: initDragCutH - dragLength
  277. })
  278. } else {
  279. return
  280. }
  281. } else {
  282. return
  283. }
  284. break;
  285. case 'rightBottom':
  286. var dragLengthX = (sizeConfPageX - e.touches[0].pageX) * dragScaleP
  287. var dragLengthY = (sizeConfPageY - e.touches[0].pageY) * dragScaleP
  288. if (initDragCutH >= dragLengthY && initDragCutW >= dragLengthX) {
  289. // bottom 方向的变化
  290. if ((dragLengthY < 0 && this.data.cropperH > initDragCutT + this.data.cutH) || (dragLengthY > 0)) {
  291. this.setData({
  292. cutH: initDragCutH - dragLengthY
  293. })
  294. }
  295. // right 方向的变化
  296. if ((dragLengthX < 0 && this.data.cropperW > initDragCutL + this.data.cutW) || (dragLengthX > 0)) {
  297. this.setData({
  298. cutW: initDragCutW - dragLengthX
  299. })
  300. } else {
  301. return
  302. }
  303. } else {
  304. return
  305. }
  306. break;
  307. default:
  308. break;
  309. }
  310. },
  311. /**
  312. * 生命周期函数--监听页面加载
  313. */
  314. onLoad: function (options) {
  315. this.setData({
  316. imageSrc: 'https://wx3.sinaimg.cn/orj360/6b03f0e6gy1h6c1mivf4lj20u01400wu.jpg'
  317. })
  318. },
  319. /**
  320. * 生命周期函数--监听页面初次渲染完成
  321. */
  322. onReady: function () {
  323. wx.showLoading({
  324. title: '图片加载中...',
  325. })
  326. wx.getImageInfo({
  327. src: this.data.imageSrc,
  328. success: res=>{
  329. var innerAspectRadio = res.width / res.height;
  330. // 根据图片的宽高显示不同的效果 保证图片可以正常显示
  331. if (innerAspectRadio >= 1) {
  332. this.setData({
  333. cropperW: windowWRPX,
  334. cropperH: windowWRPX / innerAspectRadio,
  335. // 初始化left right
  336. cropperL: Math.ceil((windowWRPX - windowWRPX) / 2),
  337. cropperT: Math.ceil((windowWRPX - windowWRPX / innerAspectRadio) / 2),
  338. // 裁剪框 宽高
  339. cutW: windowWRPX - 200,
  340. cutH: windowWRPX / innerAspectRadio - 200,
  341. cutL: Math.ceil((windowWRPX - windowWRPX + 200) / 2),
  342. cutT: Math.ceil((windowWRPX / innerAspectRadio - (windowWRPX / innerAspectRadio - 200)) / 2),
  343. // 图片缩放值
  344. scaleP: res.width * pixelRatio / windowWRPX,
  345. // 图片原始宽度 rpx
  346. imageW: res.width * pixelRatio,
  347. imageH: res.height * pixelRatio
  348. })
  349. } else {
  350. this.setData({
  351. cropperW: windowWRPX * innerAspectRadio,
  352. cropperH: windowWRPX,
  353. // 初始化left right
  354. cropperL: Math.ceil((windowWRPX - windowWRPX * innerAspectRadio) / 2),
  355. cropperT: Math.ceil((windowWRPX - windowWRPX) / 2),
  356. // 裁剪框的宽高
  357. cutW: windowWRPX * innerAspectRadio - 200,
  358. cutH: 200,
  359. cutL: Math.ceil((windowWRPX * innerAspectRadio - (windowWRPX * innerAspectRadio - 50)) / 2),
  360. cutT: Math.ceil((windowWRPX - 200) / 2),
  361. // 图片缩放值
  362. scaleP: res.width * pixelRatio / windowWRPX,
  363. // 图片原始宽度 rpx
  364. imageW: res.width * pixelRatio,
  365. imageH: res.height * pixelRatio
  366. })
  367. }
  368. this.setData({
  369. isShowImg: true
  370. })
  371. wx.hideLoading()
  372. }
  373. })
  374. },
  375. /**
  376. * 生命周期函数--监听页面显示
  377. */
  378. onShow: function () {
  379. },
  380. /**
  381. * 生命周期函数--监听页面隐藏
  382. */
  383. onHide: function () {
  384. },
  385. /**
  386. * 生命周期函数--监听页面卸载
  387. */
  388. onUnload: function () {
  389. },
  390. /**
  391. * 页面相关事件处理函数--监听用户下拉动作
  392. */
  393. onPullDownRefresh: function () {
  394. },
  395. /**
  396. * 页面上拉触底事件的处理函数
  397. */
  398. onReachBottom: function () {
  399. },
  400. /**
  401. * 用户点击右上角分享
  402. */
  403. onShareAppMessage: function () {
  404. }
  405. })

css

  1. .wx-corpper{
  2. position: relative;
  3. overflow: hidden;
  4. -webkit-user-select: none;
  5. -moz-user-select: none;
  6. -ms-user-select: none;
  7. user-select: none;
  8. -webkit-tap-highlight-color: transparent;
  9. -webkit-touch-callout: none;
  10. box-sizing: border-box;
  11. }
  12. .wx-corpper-content{
  13. position: absolute;
  14. top: 0;
  15. right: 0;
  16. bottom: 0;
  17. left: 0;
  18. }
  19. .wx-corpper-content image {
  20. display: block;
  21. width: 100%;
  22. min-width: 0 !important;
  23. max-width: none !important;
  24. height: 100%;
  25. min-height: 0 !important;
  26. max-height: none !important;
  27. image-orientation: 0deg !important;
  28. margin: 0 auto;
  29. }
  30. /* 移动图片效果 */
  31. .wx-cropper-drag-box{
  32. position: absolute;
  33. top: 0;
  34. right: 0;
  35. bottom: 0;
  36. left: 0;
  37. cursor: move;
  38. background: rgba(0,0,0,0.6);
  39. z-index: 1;
  40. }
  41. /* 内部的信息 */
  42. .wx-corpper-crop-box{
  43. position: absolute;
  44. width: 500rpx;
  45. height: 500rpx;
  46. background: rgba(255,255,255,0.3);
  47. z-index: 2;
  48. }
  49. .wx-corpper-crop-box .wx-cropper-view-box {
  50. position: relative;
  51. display: block;
  52. width: 100%;
  53. height: 100%;
  54. overflow: visible;
  55. outline: 1px solid #69f;
  56. outline-color: rgba(102, 153, 255, .75)
  57. }
  58. /* 横向虚线 */
  59. .wx-cropper-dashed-h{
  60. position: absolute;
  61. top: 33.33333333%;
  62. left: 0;
  63. width: 100%;
  64. height: 33.33333333%;
  65. border-top: 1px dashed rgba(255,255,255,0.5);
  66. border-bottom: 1px dashed rgba(255,255,255,0.5);
  67. }
  68. /* 纵向虚线 */
  69. .wx-cropper-dashed-v{
  70. position: absolute;
  71. left: 33.33333333%;
  72. top: 0;
  73. width: 33.33333333%;
  74. height: 100%;
  75. border-left: 1px dashed rgba(255,255,255,0.5);
  76. border-right: 1px dashed rgba(255,255,255,0.5);
  77. }
  78. /* 四个方向的线 为了之后的拖动事件*/
  79. .wx-cropper-line-t{
  80. position: absolute;
  81. display: block;
  82. width: 100%;
  83. background-color: #69f;
  84. top: 0;
  85. left: 0;
  86. height: 1px;
  87. opacity: 0.1;
  88. cursor: n-resize;
  89. }
  90. .wx-cropper-line-t::before{
  91. content: '';
  92. position: absolute;
  93. top: 50%;
  94. right: 0rpx;
  95. width: 100%;
  96. -webkit-transform: translate3d(0,-50%,0);
  97. transform: translate3d(0,-50%,0);
  98. bottom: 0;
  99. height: 41rpx;
  100. background: transparent;
  101. z-index: 11;
  102. }
  103. .wx-cropper-line-r{
  104. position: absolute;
  105. display: block;
  106. background-color: #69f;
  107. top: 0;
  108. right: 0px;
  109. width: 1px;
  110. opacity: 0.1;
  111. height: 100%;
  112. cursor: e-resize;
  113. }
  114. .wx-cropper-line-r::before{
  115. content: '';
  116. position: absolute;
  117. top: 0;
  118. left: 50%;
  119. width: 41rpx;
  120. -webkit-transform: translate3d(-50%,0,0);
  121. transform: translate3d(-50%,0,0);
  122. bottom: 0;
  123. height: 100%;
  124. background: transparent;
  125. z-index: 11;
  126. }
  127. .wx-cropper-line-b{
  128. position: absolute;
  129. display: block;
  130. width: 100%;
  131. background-color: #69f;
  132. bottom: 0;
  133. left: 0;
  134. height: 1px;
  135. opacity: 0.1;
  136. cursor: s-resize;
  137. }
  138. .wx-cropper-line-b::before{
  139. content: '';
  140. position: absolute;
  141. top: 50%;
  142. right: 0rpx;
  143. width: 100%;
  144. -webkit-transform: translate3d(0,-50%,0);
  145. transform: translate3d(0,-50%,0);
  146. bottom: 0;
  147. height: 41rpx;
  148. background: transparent;
  149. z-index: 11;
  150. }
  151. .wx-cropper-line-l{
  152. position: absolute;
  153. display: block;
  154. background-color: #69f;
  155. top: 0;
  156. left: 0;
  157. width: 1px;
  158. opacity: 0.1;
  159. height: 100%;
  160. cursor: w-resize;
  161. }
  162. .wx-cropper-line-l::before{
  163. content: '';
  164. position: absolute;
  165. top: 0;
  166. left: 50%;
  167. width: 41rpx;
  168. -webkit-transform: translate3d(-50%,0,0);
  169. transform: translate3d(-50%,0,0);
  170. bottom: 0;
  171. height: 100%;
  172. background: transparent;
  173. z-index: 11;
  174. }
  175. .wx-cropper-point{
  176. width: 5px;
  177. height: 5px;
  178. background-color: #69f;
  179. opacity: .75;
  180. position: absolute;
  181. z-index: 3;
  182. }
  183. .point-t{
  184. top: -3px;
  185. left: 50%;
  186. margin-left: -3px;
  187. cursor: n-resize;
  188. }
  189. .point-tr{
  190. top: -3px;
  191. left: 100%;
  192. margin-left: -3px;
  193. cursor: n-resize;
  194. }
  195. .point-r{
  196. top: 50%;
  197. left:100%;
  198. margin-left: -3px;
  199. margin-top: -3px;
  200. cursor: n-resize;
  201. }
  202. .point-rb{
  203. left: 100%;
  204. top: 100%;
  205. -webkit-transform: translate3d(-50%,-50%,0);
  206. transform: translate3d(-50%,-50%,0);
  207. cursor: n-resize;
  208. width: 24rpx;
  209. height: 24rpx;
  210. background-color: #69f;
  211. position: absolute;
  212. z-index: 1112;
  213. opacity: 1;
  214. }
  215. .point-b{
  216. left:50%;
  217. top: 100%;
  218. margin-left: -3px;
  219. margin-top: -3px;
  220. cursor: n-resize;
  221. }
  222. .point-bl{
  223. left:0%;
  224. top: 100%;
  225. margin-left: -3px;
  226. margin-top: -3px;
  227. cursor: n-resize;
  228. }
  229. .point-l{
  230. left:0%;
  231. top: 50%;
  232. margin-left: -3px;
  233. margin-top: -3px;
  234. cursor: n-resize;
  235. }
  236. .point-lt{
  237. left:0%;
  238. top: 0%;
  239. margin-left: -3px;
  240. margin-top: -3px;
  241. cursor: n-resize;
  242. }
  243. /* 裁剪框预览内容 */
  244. .wx-cropper-viewer{
  245. position: relative;
  246. width: 100%;
  247. height: 100%;
  248. overflow: hidden;
  249. }
  250. .wx-cropper-viewer image{
  251. position: absolute;
  252. z-index: 2;
  253. }
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post