您好!欢迎来到模板2345精品站长源码站!本站资源24小时自动发货,请放心选购,一次付费,终身下载,售后请联系客服!
  • 正文概述
  • 阿里云服务器低至¥89元/年 限时抢

    阿里云服务器专享1折起 | 限时抢各种代金券

    立即抢购

    腾讯云服务器低至¥50元/年 限时抢

    腾讯云服务器专享1折起 | 1核2g服务器免费拿

    立即购买

    核心代码

    组件的移动、旋转和缩放

    主要思路是把 <image> 标签(对应图片)和 <text> 标签(对应文字)封装在同一个自定义组件 <sticker> 中,通过对外暴露的 text 变量是否为空来进行条件渲染,然后绑定 onTouchStart() 、onTouchEnd() 和 onTouchMove() 三个事件来对整个组件的位置、角度、大小、层级以及 “旋转” 和 “移除” 两个按钮的行为进行操作
    onTouchStart: function (e) {
    // 若未选中则直接返回
    if (!this.data.selected) {
    return
    }

    switch (e.target.id) {
    case ‘sticker’: {
    this.touch_target = e.target.id
    this.start_x = e.touches[0].clientX * 2
    this.start_y = e.touches[0].clientY * 2
    break
    }
    case ‘handle’: {
    // 隐藏移除按钮
    this.setData({
    hideRemove: true
    })

    this.touch_target = e.target.id
    this.start_x = e.touches[0].clientX * 2
    this.start_y = e.touches[0].clientY * 2

    this.sticker_center_x = this.data.stickerCenterX;
    this.sticker_center_y = this.data.stickerCenterY;
    this.remove_center_x = this.data.removeCenterX;
    this.remove_center_y = this.data.removeCenterY;
    this.handle_center_x = this.data.handleCenterX;
    this.handle_center_y = this.data.handleCenterY;

    this.scale = this.data.scale;
    this.rotate = this.data.rotate;
    break
    }
    }
    },

    onTouchEnd: function (e) {
    this.active()
    this.touch_target = ”

    // 显示移除按钮
    this.setData({
    removeCenterX: 2 * this.data.stickerCenterX – this.data.handleCenterX,
    removeCenterY: 2 * this.data.stickerCenterY – this.data.handleCenterY,
    hideRemove: false
    })

    // 若点击移除按钮则触发移除事件,否则触发刷新数据事件
    if (e.target.id === ‘remove’) {
    this.triggerEvent(‘removeSticker’, this.data.sticker_id)
    } else {
    this.triggerEvent(‘refreshData’, this.data)
    }
    },

    onTouchMove: function (e) {
    // 若无选中目标则返回
    if (!this.touch_target) {
    return
    }

    var current_x = e.touches[0].clientX * 2
    var current_y = e.touches[0].clientY * 2
    var diff_x = current_x – this.start_x
    var diff_y = current_y – this.start_y

    switch (e.target.id) {
    case ‘sticker’: {
    // 拖动组件则所有控件同时移动
    this.setData({
    stickerCenterX: this.data.stickerCenterX + diff_x,
    stickerCenterY: this.data.stickerCenterY + diff_y,
    removeCenterX: this.data.removeCenterX + diff_x,
    removeCenterY: this.data.removeCenterY + diff_y,
    handleCenterX: this.data.handleCenterX + diff_x,
    handleCenterY: this.data.handleCenterY + diff_y
    })
    break
    }
    case ‘handle’: {
    // 拖动操作按钮则原地旋转缩放
    this.setData({
    handleCenterX: this.data.handleCenterX + diff_x,
    handleCenterY: this.data.handleCenterY + diff_y
    })

    var diff_x_before = this.handle_center_x – this.sticker_center_x;
    var diff_y_before = this.handle_center_y – this.sticker_center_y;
    var diff_x_after = this.data.handleCenterX – this.sticker_center_x;
    var diff_y_after = this.data.handleCenterY – this.sticker_center_y;
    var distance_before = Math.sqrt(diff_x_before * diff_x_before + diff_y_before * diff_y_before);
    var distance_after = Math.sqrt(diff_x_after * diff_x_after + diff_y_after * diff_y_after);
    var angle_before = Math.atan2(diff_y_before, diff_x_before) / Math.PI * 180;
    var angle_after = Math.atan2(diff_y_after, diff_x_after) / Math.PI * 180;

    this.setData({
    scale: distance_after / distance_before * this.scale,
    rotate: angle_after – angle_before + this.rotate
    })
    break
    }
    }

    this.start_x = current_x;
    this.start_y = current_y;
    }

    编辑状态的保存

    一篇手帐包含的组件类型包括 sticker(软件自带的贴纸)、image(用户上传的图片)和 text(自定义文字)三种,全部保存在一个如下格式的 json 对象中,每个独立组件都包含了一个不重复的 id 以及相关的信息,保存时由客户端生成该对象并编码成 json 字符串存储在数据库,恢复编辑状态时通过解析 json 字符串获得对象,再由编辑页面渲染

    {
        "backgroundId": "5",                                        背景图id
        "assemblies": [
            {
                "id": "jhjg",                                       组件id
                "component_type": "image",                          组件类型(自定义图片)
                "image_url": "https://example.com/jhjg.png",        图片地址
                "stickerCenterX": 269,                              中心横坐标
                "stickerCenterY": 664,                              中心纵坐标
                "scale": 1.7123667831396403,                        缩放比例
                "rotate": -3.0127875041833434,                      旋转角度
                "wh_scale": 1,                                      图片宽高比
                "z_index": 19                                       组件层级
            },
            {
                "id": "gs47",
                "component_type": "text",                           组件类型(文字)
                "text": "test",                                     文字内容
                "stickerCenterX": 479,
                "stickerCenterY": 546,
                "scale": 1.808535318980528,
                "rotate": 29.11614626607893,
                "z_index": 10
            },
            {
                "id": "chjn",
                "component_type": "sticker",                        组件类型(贴纸)
                "sticker_type": "food",                             贴纸类型
                "sticker_id": "1",                                  贴纸id
                "image_url": "https://example.com/weapp/stickers/food/1.png",
                "stickerCenterX": 277,
                "stickerCenterY": 260,
                "scale": 1.3984276885130673,
                "rotate": -16.620756913892055,
                "z_index": 5
            }
        ]
    }

    柠檬手帐 - 界面简洁的图片编辑应用,支持图片和文字的移动、旋转、缩放、保存编辑状态并生成预览图


    模板2345,网站源码,免费网站模板,商业源码下载,免费源码下载
    1、本站所有资源来源于用户上传和网络,如有侵权请联系站长处理!
    2、分享目的仅供大家学习和交流,请不要用于商业用途!本站不负任何责任!
    3、如果你也有好源码或者教程,可联系站长QQ,分享有金币奖励和额外收入!
    4、本站源码、模板、插件等资源,只有永久会员包含技术服务请大家谅解!!!!  ”开通会员→
    5、如有链接无法下载、失效或广告,请联系管理员处理!本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    6、本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7、如遇到加密压缩包,默认解压密码为"www.mb2345.com",如遇到无法解压的请联系管理员!
    8、如遇到充值未到账,请联系管理员补发!管理员整天在线,未回复请等待!
    9、网站资源具有传播性,付费类资源一经购买概不退款!望周知!
    10、使用过程中,如有任何疑问,请加QQ群与管理员联系,QQ群:4449926!模板2345官网群
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
    模板2345精品站长源码站 » 柠檬手帐 – 界面简洁的图片编辑应用,支持图片和文字的移动、旋转、缩放、保存编辑状态并生成预览图

    发表评论

    售后服务:

    • 售后服务范围 1、商业模板使用范围内问题免费咨询
      2、源码安装、模板安装(一般 ¥50-300)服务答疑仅限SVIP用户
      3、单价超过200元的模板免费一次安装,需提供服务器信息。
      付费增值服务 1、提供dedecms模板、WordPress主题、discuz模板优化等服务请详询在线客服
      2、承接 WordPress、DedeCMS、Discuz 等系统建站、仿站、开发、定制等服务
      3、服务器环境配置(一般 ¥50-300)
      4、网站中毒处理(需额外付费,500元/次/质保三个月)会员享受折扣>>
      售后服务时间 周一至周日(法定节假日除外) 9:00-23:00
      免责声明 本站所提供的模板(主题/插件)等资源仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,有部分资源为网上收集或仿制而来,若模板侵犯了您的合法权益,请来信通知我们(Email: ond@qq.com),我们会及时删除,给您带来的不便,我们深表歉意!

    Hi, 如果你对这此资源有疑问,可以跟我联系哦!

    联系作者
    赞助VIP 享更多特权,建议使用 QQ 登录
    喜欢我嘛?喜欢就按“ctrl+D”收藏我吧!♡