ios canvas ,movable-area爬坑之旅

小程序canvas爬坑之旅

canvas ios 报错canvasToTempFilePath:fail no image?

<canvas type="2d" id="mycanvas" style="display:initial;" ></canvas>

原因设置的display:initial;导致canvas不可见

canvas ios 画图出来的图片模糊

可能原因一:手机dpr像素不一致获取手机dpr进行适配

  const width = 375
  const height = 812
  // 初始化画布大小
  const dpr = wx.getWindowInfo().pixelRatio
  canvas.width = width * dpr
  canvas.height = height * dpr
  const top = height  * 0.256
  ctx.scale(dpr, dpr)

可能原因二:调整图片输出的尺寸,

wx.canvasToTempFilePath({
  x: 100,
  y: 200,
  width: 50,
  height: 50,
  destWidth: 50*3,
  destHeight: 100*3,
  canvasId: 'myCanvas',
  success: function(res) {
    console.log(res.tempFilePath)
  } 
})

可能原因三:canvas的宽高要用自带的width和height来写才是真正的画布大小

<canvas type="2d" id="mycanvas" style="width: 375px;height: 812px;"></canvas>

解决wx.showToast()消息提示框内容显示不全问题

第一种:修改提示内容,按其规定的长度去展示
第二种:将其 icon的属性值设置成 none即可

wx.showToast({
                title: '成功',//用户看到的提示信息
                icon: 'none',//提示图标,有error,success、none
                duration: 2000//停留时间
               })

canvas裁剪圆形不完整

ctx.save();   //当前区域保存
ctx.beginPath();   //开始新的区域   圆形裁剪不完整
ctx.arc(x+9+8, y+12+top+8, 8, 0, 2 * Math.PI, false) //画一个圆形裁剪区域
ctx.clip() //画了圆 再剪切  原始画布中剪切任意形状和尺寸。一旦剪切了某个区域,则所有之后的绘图都会被限制在被剪切的区域内
ctx.drawImage(image, x+9, y+12+top,16,16);   //在留言背景图上绘制头像
ctx.restore();   //恢复状态  不加导致只裁减了最后一个

ios机型背景可以拖动问题

在页面json中添加"disableScroll" :true

{
  "usingComponents": {},
  "disableScroll" :true
}

小程序海报页面ios机型动画缓慢问题解决

onChange方法里面重复太多次的setdata selectMessage数组导致性能缓慢
修改前html

  <movable-area   class="content_message" >
     <block wx:for="{{selectMessage}}" wx:key='id' >
         <movable-view  direction="all" bindchange="onChange"    bindtouchend="stopMove"  x="{{item.xxx}}" y="{{item.yyy}}" data-id='{{item.user_id}}' data-index='{{item.id}}'   data-zindex='{{item.index}}' data-mid="{{index}}"   class="image_view" style="background-image: url('{{item.image}}'); background-size:100% 100%;z-index: {{item.index}};">
           <image class="tx"  src="{{item.user_image}}"></image>
           <text class="nickname" >{{item.user_name}}</text>
           <view class="text_area_new">
           <text>{{item.name}}</text></view>
         </movable-view>
       </block>
   </movable-area>

修改前js:

onChange(e) {
    let selectMessage = this.data.selectMessage;
  
    for (let j = 0; j < selectMessage.length; j++) {
      if (e.currentTarget.dataset.index == selectMessage[j].id) {
        selectMessage[j].xxx = e.detail.x;//新的x 
     selectMessage[j].yyy = e.detail.y;
     }
    }
  
    this.setData({
      selectMessage:selectMessage
     })

  },
  stopMove(e){
    let selectMessage = this.data.selectMessage;

    let zindex = Date.parse(new Date())/ 1000;
    
     for (let j = 0; j < selectMessage.length; j++) {
       if (e.currentTarget.dataset.index == selectMessage[j].id) {
         selectMessage[j].index =  zindex
       }
     }
     this.setData({
       selectMessage:selectMessage
     })


  },

修改方案:记录当前拖拽的元素移动的宽高还有下标在bindtouchend结束之后找到移动的元素进行重新赋值即可
修改后js

onChange(e) {
    this.setData({
      changex: e.detail.x,//新的x 
      changey: e.detail.y,//新的y
      move_id:e.currentTarget.dataset.mid,//移动的id
      is_move:1,

    })
  },

  stopMove(e){
   
    let zindex = Date.parse(new Date())/ 1000;
    let x = this.data.changex;
    let y =  this.data.changey;
    let move_id = this.data.move_id;
    var that = this;
    that.setData({
       ["messageContent["+move_id+"].xxx"]:x,
       ["messageContent["+move_id+"].yyy"]:y,
       ["messageContent["+move_id+"].index"]:zindex
    });
}

ios端movable-area区域只有其中一部分 真机查看发现movable-area宽为0

movable-area 元素的定位是 position: relative;修改为absolute问题解决

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值