控制台点击报错的文件 里 点击最左边的行 刷新一下可以断点调试[图片]
TypeError: 'xxxx' is not a function怎么解决?这是我的代码,大神们帮助看看,运行时老是报错,TypeError: _this3.getLessLimitSizeImage is not a function 怎么搞定? Component({ data: { cw: wx.getSystemInfoSync().windowWidth, ITEM_SIZE: 100, // 图片大小 单位px dragImgList: [], // 图片列表 { src: string, key: number, tranX: number, tranY: number }[] imgs: [], // 图片src列表 { src: string, key: number}[] containerRes: {}, // 拖拽容器属性 currentKey: -1, // 正在拖拽图片的key currentIndex: -1, // 正在拖拽图片的index tranX: 0, // 正在拖拽图片移动的x距离 tranY: 0, // 正在拖拽图片移动的y距离 uploadPosition: { // upload上传图标位移距离 tranX: 0, tranY: 0, } }, onLoad: function (options) { wx.getPrivacySetting({ success: res => { // console.log(res) // 返回结果为: res = { needAuthorization: true/false, privacyContractName: '《xxx隐私保护指引》' } if (res.needAuthorization) { // 需要弹出隐私协议 this.setData({ showPrivacy: true }) } else { // 用户已经同意过隐私协议,所以不需要再弹出隐私协议,也能调用已声明过的隐私接口 // wx.getUserProfile() // wx.chooseMedia() // wx.getClipboardData() // wx.startRecord() wx.getSetting({ success(res) { if (!res.authSetting['scope.writePhotosAlbum']) { wx.authorize({ scope: 'scope.writePhotosAlbum', success() { // console.log(res.authSetting) } }) } } }) } } }); }, lifetimes: { ready() { this.createSelectorQuery() .select(".drag-container") .boundingClientRect((res) => { this.data.containerRes = res }).exec(); //*************** 图片压缩 *********** // 判断图片大小是否满足需求 function imageSizeIsLessLimitSize(imagePath, limitSize, lessCallBack, moreCallBack) { wx.getFileSystemManager().getFileInfo({ filePath: imagePath, success(res) { console.log("压缩前图片大小:", res.size / 1024, "kb"); if (res.size > 1024 * limitSize) { moreCallBack(); } else { lessCallBack(); } }, }); } /** * 获取画布图片 */ // 利用cavas进行压缩 function getCanvasImage( canvasId, currentInstance, imagePath, imageW, imageH, getImgsuccess ) { console.info(imageW) console.info(imageH) console.info(canvasId) console.info(currentInstance) wx.createSelectorQuery() .in(currentInstance) .select("#" + canvasId) .node(({ node: canvas }) => { canvas.width = imageW; canvas.height = imageH; const ctx = canvas.getContext("2d"); const bg = canvas.createImage(); bg.src = imagePath; bg.onload = () => { ctx.save(); ctx.translate(canvas.width / 2, canvas.height / 2); ctx.translate(-canvas.width / 2, -canvas.height / 2); ctx.drawImage(bg, 0, 0, imageW, imageH); ctx.restore(); wx.canvasToTempFilePath({ canvas, fileType: "jpg", quality: 1, success: (res) => { getImgsuccess(res.tempFilePath); }, }); }; }) .exec(function (res) { }); } // 主调用方法 /*** 获取小于限制大小的Image */ function getLessLimitSizeImage( canvasId, currentInstance, imagePath, limitSize = 100, drawWidth, callBack ) { imageSizeIsLessLimitSize( imagePath, limitSize, (lessRes) => { callBack(imagePath); }, (moreRes) => { wx.getImageInfo({ src: imagePath, success: function (imageInfo) { var maxSide = Math.max(imageInfo.width, imageInfo.height); var windowW = drawWidth; var scale = 1; if (maxSide > windowW) { scale = windowW / maxSide; } var imageW = Math.trunc(imageInfo.width * scale); var imageH = Math.trunc(imageInfo.height * scale); getCanvasImage( canvasId, currentInstance, imagePath, imageW, imageH, (pressImgPath) => { console.log("callback", pressImgPath); getLessLimitSizeImage( canvasId, currentInstance, pressImgPath, limitSize, drawWidth * 0.95, callBack ); } ); }, }); } ); } function getBase64(img) { return new Promise(function (resolve, reject) { const FSM = wx.getFileSystemManager(); FSM.readFile({ filePath: img, encoding: "base64", success(data) { resolve(data); }, }); }); } }, }, methods: { /*** 长按图片*/ longPress(e) { const index = e.mark.index const { pageX, pageY } = e.touches[0] const { top, left } = this.data.containerRes this.setData({ currentIndex: index, tranX: pageX - 50 - left, tranY: pageY - 50 - top }) }, /*** touchMove*/ touchMove(e) { // 如果currentIndex < 0,说明并没有触发longPress if (this.data.currentIndex < 0) return const { pageX, pageY } = e.touches[0] const { top, left } = this.data.containerRes const tranX = pageX - 50 - left const tranY = pageY - 50 - top this.setData({ tranX, tranY }) // 对比当前移动的key和停放位置的key,如果不一样就修改位置 const currentKey = e.mark.key const moveKey = this.getMoveKey(tranX, tranY) console.log(currentKey, moveKey); if (currentKey === moveKey || this.data.currentKey === currentKey) return this.data.currentKey = currentKey this.insert(currentKey, moveKey) }, /*** 获取移动中的key*/ getMoveKey(tranX, tranY) { const { dragImgList: list, ITEM_SIZE } = this.data const _getPositionNumber = (drag) => { const positionNumber = Math.round(drag / ITEM_SIZE) return positionNumber > 2 ? 2 : positionNumber < 0 ? 0 : positionNumber } const endKey = 3 * _getPositionNumber(tranY) + _getPositionNumber(tranX) return endKey >= list.length ? list.length - 1 : endKey }, /*** 处理移动中key的变化*/ insert(origin, end) { const dragImgList = this.data.dragImgList dragImgList.forEach((item) => { if (origin < end) { if (item.key > origin && item.key <= end) item.key-- else if (item.key === origin) item.key = end } else if (origin > end) { if (item.key >= end && item.key < origin) item.key++ else if (item.key === origin) item.key = end } }) this.getListPosition(dragImgList) }, /*** 修改位置*/ getListPosition(list) { const ITEM_SIZE = this.data.ITEM_SIZE const dragImgList = list.map((item) => { item.tranX = ITEM_SIZE * (item.key % 3); item.tranY = Math.floor(item.key / 3) * ITEM_SIZE; return item }) this.setData({ dragImgList, }) const srcList = [dragImgList].sort((a, b) => a.key - b.key).map((item) => item.src) this.triggerEvent('updateImage', { list: srcList }) }, /*** touchEnd*/ touchEnd() { this.setData({ tranX: 0, tranY: 0, currentIndex: -1, }) this.data.currentKey = -1 }, // 修改上传图标位置 setUploaPosition(listLength) { const ITEM_SIZE = this.data.ITEM_SIZE const uploadPosition = { tranX: listLength % 3 * ITEM_SIZE, tranY: Math.floor(listLength / 3) * ITEM_SIZE, } this.setData({ uploadPosition, }) }, /*** 删除图片*/ deleteImg(e) { const key = e.mark.key const list = this.data.dragImgList.filter((item) => item.key !== key) list.forEach((item) => item.key > key && item.key--) this.getListPosition(list) this.setUploaPosition(list.length) }, /*** 对多张图片进行预览*/ previewImg: function (e) { //获取当前图片的下标 var index = e.currentTarget.dataset.index; //所有图片 var imgs = this.data.imgs; // console.log(imgs); wx.previewImage({ //当前显示图片 current: imgs[index], //所有图片 urls: imgs }) }, /*** 上传图片*/ uploadImage() { let { dragImgList, ITEM_SIZE } = this.data var that = this; var imgs = this.data.imgs; if (imgs.length >= 9) { that.setData({ lenMore: 1 }); setTimeout(function () { that.setData({ lenMore: 0 }); }, 2500); return false; } wx.chooseMedia({ count: 9 - dragImgList.length, sizeType: ['original', 'compressed'], sourceType: ['album', 'camera'], mediaType: 'image', success: (res) => { // console.log(res.tempFiles) const imgList = res.tempFiles.map((item, index) => ({ tranX: ITEM_SIZE * ((dragImgList.length + index) % 3), tranY: Math.floor((dragImgList.length + index) / 3) * ITEM_SIZE, src: item.tempFilePath, key: dragImgList.length + index })) var tempFilePaths = res.tempFiles; var imgs = that.data.imgs; for (var i = 0; i < tempFilePaths.length; i++) { let canvasId = 'zipCanvas' //注意这里的id和你在页面中写的html代码的canvas的id要一致 let imagePath = tempFilePaths[i].tempFilePath; //原图的路径 // console.log('图片原路径:' + imagePath) let limitSize = 512; //大小限制2048kb let drawWidth = wx.getSystemInfoSync().windowWidth; //初始绘画区域是画布自身的宽度也就是屏幕宽度 wx.showLoading({ title: '图片压缩中...', mask: true }) //不需要你可以删掉 let that = this /* canvasId: 微信canvas 2.0 的id值 currentInstance: 这个很重要, 这就是当前页面组件的实例, 这个就是自定义函数内部用来使用wx.createSelector的api中in(this) 的对象, 不然我们是无法从过query方法去获取当前页面的canvas的。 imagePath: wx.chooseImage API返回的临时图片经验, 也是通过这个图片我们实现再canvas上绘制截图的。 limitSize = 100 这个是对小于100KB的图片不进行压缩限制。 drawWidth: 要压缩到的目标宽度 callBack: 压缩完成后重新拿到的图片回调函数。 */ this.getLessLimitSizeImage(canvasId, that, imagePath, 400, 500); console.log(img, "---"); imgs.push(resPath); wx.setStorage({ key: "imgs_src", data: imgs }) dragImgList = dragImgList.concat(imgList) this.setUploaPosition(dragImgList.length) this.setData({ dragImgList }) } }, fail(err) { // console.log('err', err); } }) }, fail: () => {}, complete: () => {} }, })
2023-11-10企业300 个体户30(限时优惠以后涨回300) 个人30
个体户认证公众号或小程序费用?现在个体户认证公众号或小程序费用是不是由300变成了30
2023-11-10没用过。
xr-frame中加载的gltf文件在点击轮廓的时候怎么获取当前轮廓的节点name?我通过如下方式加载了一个gltf文件: <xr-gltf cube-shape="autoFit:true" shape-gizmo bind:touch-shape="onTouchShape" node-id="gltf-damageHelmet" bind:gltf-loaded="handleGLTFLoaded" model="gltf-damageHelmet"></xr-gltf> 这个gltf模型是一台设备一样的东西,有非常多个节点,其中有部分节点进行了特殊命名,并且可以点击到这些节点。 我现在的问题是:我点击到了某个特殊节点,同时onTouchShape回调返回了一个对象,但不管是detail中的el还是value,似乎都指向了整个gltf?我要怎么拿到当前点击的这个节点的name? 如果不能做到的话,是否有什么方法可以让我在点击的时候获取到这个节点的坐标位置?
2023-11-10微信认证->查看订单->修改资料
微信小程序认证重填,填什么?微信小程序认证被驳回,说是需要重填,但我已经按要求填写上传了,不知道哪里有缺失。 [图片]
2023-11-10今年收30试探 明年就敢慢慢涨价
微信这是穷疯了?[图片] 个人小程序本来就没啥鸟用,还收300块钱
2023-11-10韭菜长高开始割咯
无法复用已认证的公众号的资质认证小程序,在快速注册小程序里注册,也不可以默认使用公众号免费认证了吗?[图片]
2023-11-10不认证相当于这小程序废了
小程序现在必须认证才能发版,分享吗?账号未完成微信认证,为确保账号运营主体经营状态存续、命名合规、行业资质真实有效且线上服务正常可用,请在2023年12月10日前完成微信认证。逾期未完成认证将影响新版本发布和“被搜索、分享”能力。申请指引:登录账号后台-左侧导航栏-【微信认证】。 这个通知,是以后不认证的小程序 不能发版了吗? 被搜索,是在微信的小程序搜索栏搜不到了吗? 分享是不能在微信通过点击三个点把小程序分享给其他人的意思吗? 希望给具体解释一下
2023-11-10加急吧
现在小程序审核怎么这么慢?我们小程序里有个视频,是甲方业主提供给我们的宣传视频,两三年没变了。然后审核直接打回说我们涉及提供给用户播放、观看等服务,要我们加文娱视频类目。我文娱鸡你太美哦。 好,我们退步了。因为我们明天就要用到了,到时候要是还没审核上线,几万人会在会场外面排队等着我们小程序上线。所以我没办法,只能直接把宣传视频也给删了,但是昨天晚上18点提交的,到现在还没给我审核过,我们业主现在急死了,我又不知道我们进入到审核哪个环节了,要是现在退掉重新加急申请,万一变慢了可咋整。 我们已经在商量要不要换抖音小程序了,毕竟抖音现在不比你们微信弱
2023-11-10先慢慢推行看你们的反应 发公告肯定炸锅
已经微信认证过的小程序,刚刚又收到年审通知了,请问是怎么回事?我有一个小程序21年注册认证成功了,已经用了快三年了,突然收到年审通知了,这个为什么?不是说小程序只需要注册认证过一次,后续就不用再年审认证了么。
2023-11-10个人没得玩了,去注册公司也不可能 成本太高了,凉凉
个人小程序资质不再支持工具类目?昨天下午首次个人认证,弄了三个,电话很快打来,两个点,1.名称不能体现出个人特征;2.工具类目不在支持个人资质运营。查了大半天,又问了别人一大圈,今天又问的审核,就是不支持,第三方外包公司协议早就更新八辈子了,行行行,个人坑我100是吧,我拿企业跟你玩[图片]
2023-11-10