下载不能超过200M
部分手机wx.downloadFile不了pdf文件,进度走到某个值就停了[图片][图片]
2023-11-14只要是你微信扫码,照着楼上给的公众平台地址扫一下看看
大学做兼职,给了对方手机号和验证码,对方注册了小程序账号,我自己能注销吗,是否需要联系对方?求解答
2023-11-14参考加速度感应器:https://developers.weixin.qq.com/miniprogram/dev/api/device/accelerometer/wx.startAccelerometer.html
想在小程序中实现一个摇一摇抽奖的小功能该怎么实现?想在小程序中实现一个摇一摇抽奖的小功能该怎么实现?
2023-11-14写错链接了不,api 打头是接口吧
微信小程序 web-view 打开网页 提示已停止访问该网页?小程序中业务域名和服务器域名都配置了,还是提示停止访问
2023-11-14安卓上如果当前页面栈只有一个,返回就会触发退出小程序,无解
reLaunch后点物理返回按钮,会退出小程序?现象:从A页面reLaunch到B页面,在B页面下点击安卓物理返回按钮,会直接退出小程序。 试过使用[代码]onUnload[代码] 、[代码]onHide[代码] ,都不起作用。wx.enableAlertBeforeUnload 也试过无效。 从A页面reLaunch到B页面的原因是,A前面有超过10个页面连续跳转,x1->x2->...->x9->A---reLaunch--->B,此时A如果继续使用navigateTo B会报错,redirectTo B返回也有问题。所以选用reLaunch,没想到物理返回把小程序都关了。 左上角的返回是自定义头部,没问题,但是点击安卓物理返回按钮,会直接退出小程序的问题 怎么解决? [图片]
2023-11-14这个你应该找滴滴要对接,前提他们提供了第三方跳转对接文档
自己的小程序想要跳转到滴滴出行小程序,直接打开打车页面?自己的小程序想要跳转到滴滴出行小程序,并且直接带上目的地,打开滴滴的打车页面,需要哪些调哪个方法传什么参数呢?目前使用的wx.navigateToMiniProgram只能跳转到出行首页,不知道应该带哪些参数可以自动填入目的地进入打车页面 uni.navigateToMiniProgram({ // shortLink: '#小程序://滴滴出行丨打车骑行火车租车代驾/O0XDqP6JaIWJXRc', appId: 'wxaf35009675aa0b2a', extraData: { name: '圆明园遗址公园', lat: parseFloat(latitude), lng: parseFloat(longitude), }, envVersion: 'release', success(res) {}, fail(res) {}, }) 目前尝试过appId 和shortLink的形式都是只可以跳转的到首页 求教各位大佬指教
2023-11-13加固是什么东西?加密?
如果使用miniprogram-ci 进行小程序代码的上传,还可以进行小程序代码加固吗?如果使用miniprogram-ci 进行小程序代码的上传,还可以进行小程序代码加固吗?在微信开发文档/工具/CI中并未找到对应的插件配置
2023-11-13你这个就好比你通过中介买房,你所有钱给了中介,到头来是恒大还是碧桂园负责?这个莫名其妙的钱还是自己算清楚
如何再次开发小程序?我在2017年买了两个小程序,现在要启用了,结果卖小程序的公司不见了,人也联系不上。怎么办
2023-11-13如果是webview,也可以参考一下这种: https://developers.weixin.qq.com/community/develop/article/doc/0006289c09c8981dfc80bf5bb61813
想开发一个本地图片处理工具,有没有图片处理的工具可以用?大佬们,纯小白,勿笑,我想开发一个本地图片处理工具,大概功能是,用户选择图片后,可以在上面添加一些文案,文案可以添加一些花边或者其他效果,调整文案在图片上的位置,然后保存到本地,也可以分享到朋友圈之类的功能,有没有现成的图片处理功能或者啥技术可以搞,
2023-11-13你这声明的自由函数这么多,this 指向乱的很,直接顶部 const self = this 调用实例的东西 用 self.xxx 不要用 this了
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-13