HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

v3编译遇到的问题

v3

一开始如图中疯狂报错cid unmatched [object Object] at view.umd.min.js:1
10:21:33.673 TypeError: Invalid attempt to destructure non-iterable instance.
10:21:33.693 In order to be iterable, non-array objects must have a [Symbol.iterator]() method. at view.umd.min.js:1,找不出原因,然后网上百度到的内容说循环遍历出了问题,由于我的app其他列表是好的就这一个出问题,然后我就与其他列表做对比,发现写循环时一开始是这么写的<station v-for="station in stationList" :station="station" :key="station.id" />
而其他列表中则是<station v-for="station in stationList" :station="station" :key="station.stationId" />更改完之后问题就解决了

继续阅读 »

一开始如图中疯狂报错cid unmatched [object Object] at view.umd.min.js:1
10:21:33.673 TypeError: Invalid attempt to destructure non-iterable instance.
10:21:33.693 In order to be iterable, non-array objects must have a [Symbol.iterator]() method. at view.umd.min.js:1,找不出原因,然后网上百度到的内容说循环遍历出了问题,由于我的app其他列表是好的就这一个出问题,然后我就与其他列表做对比,发现写循环时一开始是这么写的<station v-for="station in stationList" :station="station" :key="station.id" />
而其他列表中则是<station v-for="station in stationList" :station="station" :key="station.stationId" />更改完之后问题就解决了

收起阅读 »

在调用的时候就知道API对不同平台的支持

HBuilder X

现在遇到一个特别麻烦的事情,uni-app混合了H5、小程序、uni-app自己的语言,很多时候不知道H5不能在app端用,写完之后发现不能用来回调试。

能否让HBuilderX工具更智能一些,调用的时候就告诉这个API能在哪个平台使用,可以为开发者节约很多的时间。

继续阅读 »

现在遇到一个特别麻烦的事情,uni-app混合了H5、小程序、uni-app自己的语言,很多时候不知道H5不能在app端用,写完之后发现不能用来回调试。

能否让HBuilderX工具更智能一些,调用的时候就告诉这个API能在哪个平台使用,可以为开发者节约很多的时间。

收起阅读 »

app进入后台,多任务管理器,界面变毛玻璃高斯模糊、透明效果

app进入后台毛玻璃高斯模糊效果(ios):https://ext.dcloud.net.cn/plugin?id=2373
app进入后台透明效果、应用内禁止截屏(andorid):https://ext.dcloud.net.cn/plugin?id=2379

继续阅读 »

app进入后台毛玻璃高斯模糊效果(ios):https://ext.dcloud.net.cn/plugin?id=2373
app进入后台透明效果、应用内禁止截屏(andorid):https://ext.dcloud.net.cn/plugin?id=2379

收起阅读 »

苹果上架好难呀 准则4.3 -设计 请问下 这么修改

准则4.3 -设计

我们注意到您的app提供的功能设置与提交到app Store的其他app相同;它只是在内容或语言上有所不同,这被认为是垃圾邮件的一种形式。

准则4.3 -设计

我们注意到您的app提供的功能设置与提交到app Store的其他app相同;它只是在内容或语言上有所不同,这被认为是垃圾邮件的一种形式。

android自动截图,并利用插件canvas生成可自定义的图片分享到微信(5+接口因为map地图和echarts截图后会出现黑色部分)

第一步:自动截图
使用的插件市场的大佬:https://ext.dcloud.net.cn/plugin?id=1886
// 转码
getBase64ByUri(screenrShotUri) {
console.log("654321");
return new Promise((resolve, reject) => {
try {
console.log("123456");
plus.io.resolveLocalFileSystemURL(
screenrShotUri,
function(entry) {
// 可通过entry对象操作test.html文件
// console.log("可通过entry对象操作test.html文件");
entry.file(function(file) {
var fileReader = new plus.io.FileReader();
// console.log("getFile:" + JSON.stringify(file));

                            fileReader.onloadend = function(evt) {  
                                // console.log(evt.target.result)  
                                resolve(evt.target.result);  
                            };  
                            // fileReader.readAsText(file, 'utf-8');  
                            fileReader.readAsDataURL(file);  
                        });  
                    },  
                    function(e) {  
                        console.log('Resolve file URL failed: ', e);  
                        uni.showToast({  
                            title: '图片读取失败',  
                            icon: 'none'  
                        });  
                        reject();  
                    }  
                );  
            } catch (e) {  
                uni.showToast({  
                    title: '图片读取失败',  
                    icon: 'none'  
                });  
                reject();  
            }  
        });  
    },  
    // 分享  
    shareTraing() {  
        const ssTest = uni.requireNativePlugin('hsj-screenshothsj');  
        ssTest.handle2ScreenShotNotDialogFuncV2({ msg: 'handle2ScreenShotNotDialogFuncV2 ...' }, result => {  
            switch (result.type) {  
                case 0:  
                    this.backText.push(result.data.toString());  
                    break;  
                case 1:  
                    //显示图片  
                    this.src = result.data.toString();  
                    console.log(this.src);  
                    this.getBase64ByUri(this.src).then(res => {  
                        // console.log(res)  
                        this.src = res;  
                        // this.istestshow = true  
                        this.shareFc();  
                    });  
                    this.backText.push('-图片地址路径:' + result.data.toString());  

                    break;  
                default:  
                    console.log('no have type');  
            }  
        });  

另附上5+的方法:
/ let pages = getCurrentPages();
let page = pages[pages.length - 1];
// #ifdef APP-PLUS
let ws = page.$getAppWebview();
// #endif
// ws.append(this.mapCtx);
let bitmap = new plus.nativeObj.Bitmap('drawScreen');
// 将webview内容绘制到Bitmap对象中
ws.draw(bitmap, () => {
// 保存图片到本地
bitmap.save("_doc/"+new Date().getTime()+".jpg", {
overwrite: true
}, res => {
console.log(res.target); // 图片地址
}, error => {
console.log(JSON.stringify(error)); // 保存失败信息
});
bitmap.clear(); // 清除Bitmap对象
}, error => {
console.log(JSON.stringify(error)); // 绘制失败
}, {
check: true, // 设置为检测白屏
});
/

第二步:将截图自定义成想要的图片
插件大佬:https://ext.dcloud.net.cn/plugin?id=471#custom
// 画布
async shareFc() {
try {
_app.log('准备生成:' + new Date())
const d = await getSharePoster({
_this: this, //若在组件中使用 必传
type: 'testShareType',
formData: {
//访问接口获取背景图携带自定义数据

                },  
                posterCanvasId: this.canvasId,  //canvasId  
                delayTimeScale: 20, //延时系数  
                backgroundImage: this.src,  
                drawArray: ({  
                    bgObj,  
                    type,  
                    bgScale  
                }) => {  
                    const dx = bgObj.width * 0.3;  
                    const fontSize = bgObj.width * 0.045;  
                    const lineHeight = bgObj.height * 0.06;  
                    //可直接return数组,也可以return一个promise对象, 但最终resolve一个数组, 这样就可以方便实现后台可控绘制海报  
                    return new Promise((rs, rj) => {  
                        rs([{  
                                type: 'custom',  
                                setDraw(Context) {  
                                    Context.setFillStyle('black');  
                                    Context.setGlobalAlpha(0.7);  
                                    Context.fillRect(0, bgObj.height - bgObj.height * 0.13, bgObj.width, bgObj.height * 0.13);  
                                    Context.setGlobalAlpha(1);  
                                }  
                            },  
                            {  
                                type: 'image',  
                                url: 'http://哈哈哈哈.png', // 图标或者用户头像  
                                alpha: 1,  
                                dx,  
                                dy: bgObj.height - bgObj.width * 0.25,  
                                infoCallBack(imageInfo) {  
                                    let scale = bgObj.width * 0.2 / imageInfo.height;  
                                    return {  
                                        circleSet: {  
                                            x: imageInfo.width * scale / 2,  
                                            y: bgObj.width * 0.2 / 2,  
                                            r: bgObj.width * 0.2 / 2  
                                        }, // 圆形图片 , 若circleSet与roundRectSet一同设置 优先circleSet设置  
                                        dWidth: imageInfo.width * scale, // 因为设置了圆形图片 所以要乘以2  
                                        dHeight: bgObj.width * 0.2,  
                                        /* roundRectSet: { // 圆角矩形  
                                            r: imageInfo.width * .1  
                                        } */  
                                    }  
                                }  
                            },  
                            {  
                                type: 'text',  
                                text: 'app 名称或者其他想要展示的文字',  
                                fontWeight: 'bold',  
                                size: fontSize,  
                                color: 'white',  
                                alpha: 1,  
                                textAlign: 'left',  
                                textBaseline: 'middle',  
                                serialNum: 1,  
                                infoCallBack(textLength) {  
                                    return {  
                                        dx: bgObj.width - textLength - fontSize,  
                                        dy: bgObj.height - lineHeight + 20  
                                    }  
                                }  
                            },  
                            {  
                                type: 'qrcode',  
                                text: 'http:/我的 app下载连接aab0e4d9ebd89d.apk', // 这里是可以将连接或者文件,生成二维码。  
                                size: bgObj.width * 0.2,  
                                dx: bgObj.width*0.05,  
                                dy: bgObj.height - bgObj.width*0.25  
                            }  
                        ]);  
                    })  
                },  
                setCanvasWH: ({  
                    bgObj,  
                    type,  
                    bgScale  
                }) => { // 为动态设置画布宽高的方法,  
                    this.poster = bgObj;  
                }  
            });  
            _app.log('海报生成成功, 时间:' + new Date() + ', 临时路径: ' + d.poster.tempFilePath)  
            this.poster.finalPath = d.poster.tempFilePath;  
            this.qrShow = true;  
        } catch (e) {  
            _app.hideLoading();  
            _app.showToast(JSON.stringify(e));  
            console.log(JSON.stringify(e));  
        }  
    },  
    saveImage() {  
        // #ifndef H5  
        uni.saveImageToPhotosAlbum({  
            filePath: this.poster.finalPath,  
            success(res) {  
                _app.showToast('保存成功');  
            }  
        })  
        // #endif  
        // #ifdef H5  
        _app.showToast('保存了');  
        // #endif  
    },  
    share() {  
        // #ifdef APP-PLUS  
        _app.getShare(false, false, 2, '', '', '', this.poster.finalPath, false, false);  
        // #endif  

        // #ifndef APP-PLUS  
        _app.showToast('分享成功');  
        // #endif  
    },  
继续阅读 »

第一步:自动截图
使用的插件市场的大佬:https://ext.dcloud.net.cn/plugin?id=1886
// 转码
getBase64ByUri(screenrShotUri) {
console.log("654321");
return new Promise((resolve, reject) => {
try {
console.log("123456");
plus.io.resolveLocalFileSystemURL(
screenrShotUri,
function(entry) {
// 可通过entry对象操作test.html文件
// console.log("可通过entry对象操作test.html文件");
entry.file(function(file) {
var fileReader = new plus.io.FileReader();
// console.log("getFile:" + JSON.stringify(file));

                            fileReader.onloadend = function(evt) {  
                                // console.log(evt.target.result)  
                                resolve(evt.target.result);  
                            };  
                            // fileReader.readAsText(file, 'utf-8');  
                            fileReader.readAsDataURL(file);  
                        });  
                    },  
                    function(e) {  
                        console.log('Resolve file URL failed: ', e);  
                        uni.showToast({  
                            title: '图片读取失败',  
                            icon: 'none'  
                        });  
                        reject();  
                    }  
                );  
            } catch (e) {  
                uni.showToast({  
                    title: '图片读取失败',  
                    icon: 'none'  
                });  
                reject();  
            }  
        });  
    },  
    // 分享  
    shareTraing() {  
        const ssTest = uni.requireNativePlugin('hsj-screenshothsj');  
        ssTest.handle2ScreenShotNotDialogFuncV2({ msg: 'handle2ScreenShotNotDialogFuncV2 ...' }, result => {  
            switch (result.type) {  
                case 0:  
                    this.backText.push(result.data.toString());  
                    break;  
                case 1:  
                    //显示图片  
                    this.src = result.data.toString();  
                    console.log(this.src);  
                    this.getBase64ByUri(this.src).then(res => {  
                        // console.log(res)  
                        this.src = res;  
                        // this.istestshow = true  
                        this.shareFc();  
                    });  
                    this.backText.push('-图片地址路径:' + result.data.toString());  

                    break;  
                default:  
                    console.log('no have type');  
            }  
        });  

另附上5+的方法:
/ let pages = getCurrentPages();
let page = pages[pages.length - 1];
// #ifdef APP-PLUS
let ws = page.$getAppWebview();
// #endif
// ws.append(this.mapCtx);
let bitmap = new plus.nativeObj.Bitmap('drawScreen');
// 将webview内容绘制到Bitmap对象中
ws.draw(bitmap, () => {
// 保存图片到本地
bitmap.save("_doc/"+new Date().getTime()+".jpg", {
overwrite: true
}, res => {
console.log(res.target); // 图片地址
}, error => {
console.log(JSON.stringify(error)); // 保存失败信息
});
bitmap.clear(); // 清除Bitmap对象
}, error => {
console.log(JSON.stringify(error)); // 绘制失败
}, {
check: true, // 设置为检测白屏
});
/

第二步:将截图自定义成想要的图片
插件大佬:https://ext.dcloud.net.cn/plugin?id=471#custom
// 画布
async shareFc() {
try {
_app.log('准备生成:' + new Date())
const d = await getSharePoster({
_this: this, //若在组件中使用 必传
type: 'testShareType',
formData: {
//访问接口获取背景图携带自定义数据

                },  
                posterCanvasId: this.canvasId,  //canvasId  
                delayTimeScale: 20, //延时系数  
                backgroundImage: this.src,  
                drawArray: ({  
                    bgObj,  
                    type,  
                    bgScale  
                }) => {  
                    const dx = bgObj.width * 0.3;  
                    const fontSize = bgObj.width * 0.045;  
                    const lineHeight = bgObj.height * 0.06;  
                    //可直接return数组,也可以return一个promise对象, 但最终resolve一个数组, 这样就可以方便实现后台可控绘制海报  
                    return new Promise((rs, rj) => {  
                        rs([{  
                                type: 'custom',  
                                setDraw(Context) {  
                                    Context.setFillStyle('black');  
                                    Context.setGlobalAlpha(0.7);  
                                    Context.fillRect(0, bgObj.height - bgObj.height * 0.13, bgObj.width, bgObj.height * 0.13);  
                                    Context.setGlobalAlpha(1);  
                                }  
                            },  
                            {  
                                type: 'image',  
                                url: 'http://哈哈哈哈.png', // 图标或者用户头像  
                                alpha: 1,  
                                dx,  
                                dy: bgObj.height - bgObj.width * 0.25,  
                                infoCallBack(imageInfo) {  
                                    let scale = bgObj.width * 0.2 / imageInfo.height;  
                                    return {  
                                        circleSet: {  
                                            x: imageInfo.width * scale / 2,  
                                            y: bgObj.width * 0.2 / 2,  
                                            r: bgObj.width * 0.2 / 2  
                                        }, // 圆形图片 , 若circleSet与roundRectSet一同设置 优先circleSet设置  
                                        dWidth: imageInfo.width * scale, // 因为设置了圆形图片 所以要乘以2  
                                        dHeight: bgObj.width * 0.2,  
                                        /* roundRectSet: { // 圆角矩形  
                                            r: imageInfo.width * .1  
                                        } */  
                                    }  
                                }  
                            },  
                            {  
                                type: 'text',  
                                text: 'app 名称或者其他想要展示的文字',  
                                fontWeight: 'bold',  
                                size: fontSize,  
                                color: 'white',  
                                alpha: 1,  
                                textAlign: 'left',  
                                textBaseline: 'middle',  
                                serialNum: 1,  
                                infoCallBack(textLength) {  
                                    return {  
                                        dx: bgObj.width - textLength - fontSize,  
                                        dy: bgObj.height - lineHeight + 20  
                                    }  
                                }  
                            },  
                            {  
                                type: 'qrcode',  
                                text: 'http:/我的 app下载连接aab0e4d9ebd89d.apk', // 这里是可以将连接或者文件,生成二维码。  
                                size: bgObj.width * 0.2,  
                                dx: bgObj.width*0.05,  
                                dy: bgObj.height - bgObj.width*0.25  
                            }  
                        ]);  
                    })  
                },  
                setCanvasWH: ({  
                    bgObj,  
                    type,  
                    bgScale  
                }) => { // 为动态设置画布宽高的方法,  
                    this.poster = bgObj;  
                }  
            });  
            _app.log('海报生成成功, 时间:' + new Date() + ', 临时路径: ' + d.poster.tempFilePath)  
            this.poster.finalPath = d.poster.tempFilePath;  
            this.qrShow = true;  
        } catch (e) {  
            _app.hideLoading();  
            _app.showToast(JSON.stringify(e));  
            console.log(JSON.stringify(e));  
        }  
    },  
    saveImage() {  
        // #ifndef H5  
        uni.saveImageToPhotosAlbum({  
            filePath: this.poster.finalPath,  
            success(res) {  
                _app.showToast('保存成功');  
            }  
        })  
        // #endif  
        // #ifdef H5  
        _app.showToast('保存了');  
        // #endif  
    },  
    share() {  
        // #ifdef APP-PLUS  
        _app.getShare(false, false, 2, '', '', '', this.poster.finalPath, false, false);  
        // #endif  

        // #ifndef APP-PLUS  
        _app.showToast('分享成功');  
        // #endif  
    },  
收起阅读 »

composition-api 在 uni-app 微信小程序中的使用

微信小程序

一开始我按照 composition-api 官方文档 中所说的引入 import VueCompositionAPI from "@vue/composition-api"; 然后使用 Vue.use(VueCompositionAPI); 在开发模式下一切完美。

但编译之后就不行了,在网上找到了 https://github.com/dcloudio/uni-app/issues/1839 ,里面有我的解决方案,但修改 npm 包终究不太好,刚刚终于研究出了在main.js 中使用一段代码解决这个问题的方法

  /** uni-app composition api补丁 */ (() => {  
    /** uni-app 会在 beforeUpdate 的时候调用这个函数来进行和微信进程数据的交换 */  
    const oldPatch = Vue.prototype.__patch__ as Function;  
    Vue.prototype.__patch__ = function(...arg: any) {  
      补丁(this);  
      oldPatch.call(this, ...arg);  
    };  

    function 补丁(vm: any) {  
      if (vm._computedWatchers === undefined) {  
        vm._computedWatchers = {};  
      }  
      const ret = vm._data;  
      var rawBindings = getRawBindings(vm);  
      if (rawBindings) {  
        Object.keys(rawBindings).forEach(function(key) {  
          // && vm.mpType === "component"  
          if (config.is_dev) {  
            /** 开发版补丁 */  
            const v = rawBindings[key];  
            // console.log("[ret[key]] " + key, ret[key], v);  
            if (isRef(v)) {  
              if (isReadonly(v)) {  
                /**  只读的值一般是计算属性,所以放到computed中,要是放到data中uni-app会尝试写,这样导致报错 */  
                vm._computedWatchers[key] = v;  
              } else {  
                ret[key] = v.value;  
              }  
            } else {  
              ret[key] = v;  
            }  
          } else {  
            /** 编译版补丁 */  
            ret[key] = undefined;  
          }  
        });  
      }  
    }  
    function getRawBindings(vm: any) {  
      return vm.__composition_api_state__ && vm.__composition_api_state__.rawBindings;  
    }  
  })();

只需要在加上这段代码即可编译后也能正常使用 composition-api 了。composition-api 真滴香

继续阅读 »

一开始我按照 composition-api 官方文档 中所说的引入 import VueCompositionAPI from "@vue/composition-api"; 然后使用 Vue.use(VueCompositionAPI); 在开发模式下一切完美。

但编译之后就不行了,在网上找到了 https://github.com/dcloudio/uni-app/issues/1839 ,里面有我的解决方案,但修改 npm 包终究不太好,刚刚终于研究出了在main.js 中使用一段代码解决这个问题的方法

  /** uni-app composition api补丁 */ (() => {  
    /** uni-app 会在 beforeUpdate 的时候调用这个函数来进行和微信进程数据的交换 */  
    const oldPatch = Vue.prototype.__patch__ as Function;  
    Vue.prototype.__patch__ = function(...arg: any) {  
      补丁(this);  
      oldPatch.call(this, ...arg);  
    };  

    function 补丁(vm: any) {  
      if (vm._computedWatchers === undefined) {  
        vm._computedWatchers = {};  
      }  
      const ret = vm._data;  
      var rawBindings = getRawBindings(vm);  
      if (rawBindings) {  
        Object.keys(rawBindings).forEach(function(key) {  
          // && vm.mpType === "component"  
          if (config.is_dev) {  
            /** 开发版补丁 */  
            const v = rawBindings[key];  
            // console.log("[ret[key]] " + key, ret[key], v);  
            if (isRef(v)) {  
              if (isReadonly(v)) {  
                /**  只读的值一般是计算属性,所以放到computed中,要是放到data中uni-app会尝试写,这样导致报错 */  
                vm._computedWatchers[key] = v;  
              } else {  
                ret[key] = v.value;  
              }  
            } else {  
              ret[key] = v;  
            }  
          } else {  
            /** 编译版补丁 */  
            ret[key] = undefined;  
          }  
        });  
      }  
    }  
    function getRawBindings(vm: any) {  
      return vm.__composition_api_state__ && vm.__composition_api_state__.rawBindings;  
    }  
  })();

只需要在加上这段代码即可编译后也能正常使用 composition-api 了。composition-api 真滴香

收起阅读 »

ios toDataURL 问题

修改 ios 打包时的内核

tips:
首先 要确保 海报生成 在safai 正常,多看看 html2canvas 的使用,调整

修改 ios 打包时的内核

tips:
首先 要确保 海报生成 在safai 正常,多看看 html2canvas 的使用,调整

电话状态监听、接听电话、挂断电话、来电自动接听、来电自动挂断、回调手机号码(ios、android)

电话状态监听、接听电话、挂断电话、来电自动接听、来电自动挂断、回调手机号码(ios、android):https://ext.dcloud.net.cn/plugin?id=8756

继续阅读 »

电话状态监听、接听电话、挂断电话、来电自动接听、来电自动挂断、回调手机号码(ios、android):https://ext.dcloud.net.cn/plugin?id=8756

收起阅读 »

canvas 的 canvas-id 设置无效

我这边使用 插件市场的uQRCode二维码生成插件,但是在设置动态canvas-id时候一直无效,导致后续uni.canvasToTempFilePath()一直无法获取到canvas

我这边使用 插件市场的uQRCode二维码生成插件,但是在设置动态canvas-id时候一直无效,导致后续uni.canvasToTempFilePath()一直无法获取到canvas

监听uniapp页面滚动结束的方法

  1. 监听页面生命周期 onReachBottom 链接: https://uniapp.dcloud.io/collocation/frame/lifecycle
  2. page-meta 标签 有一个事件 @scrolldone 可以直接监听页面滚动结束
  3. 引入了一个组件,组件中要监听页面滚动结束,就不能用 页面生命周期 了
    在 <scroll-view></scroll-view>监听滚动事件( 注意:必须给scroll-view标签设定高度,不然事件没有效果),@scroll="addClass",
    data中定义了2个变量, scroll_end(为真滚动结束),scrollTop (页面滚动的高度)

                        addClass(event){  
                this.scroll_end = false;  
                const that = this;  
                this.scrollTop = event.detail.scrollTop;  
                clearTimeout(timer);  
                var timer = setTimeout(function(){  
                    if( event.detail.scrollTop === that.scrollTop ){  
                        that.scroll_end = true;  
                        console.log(that.scroll_end,"是否结束",event.detail.scrollTop, "data", that.scrollTop )  
                        clearTimeout(timer);  
                        timer = null;  // 处理回收   
                    }  
    
                }, 500)  
            },
    效果展示: 绑定的是 animate.css 的class class="{'animate__backOutRight': !scroll_end, 'animate__backInRight' : scroll_end }"
继续阅读 »
  1. 监听页面生命周期 onReachBottom 链接: https://uniapp.dcloud.io/collocation/frame/lifecycle
  2. page-meta 标签 有一个事件 @scrolldone 可以直接监听页面滚动结束
  3. 引入了一个组件,组件中要监听页面滚动结束,就不能用 页面生命周期 了
    在 <scroll-view></scroll-view>监听滚动事件( 注意:必须给scroll-view标签设定高度,不然事件没有效果),@scroll="addClass",
    data中定义了2个变量, scroll_end(为真滚动结束),scrollTop (页面滚动的高度)

                        addClass(event){  
                this.scroll_end = false;  
                const that = this;  
                this.scrollTop = event.detail.scrollTop;  
                clearTimeout(timer);  
                var timer = setTimeout(function(){  
                    if( event.detail.scrollTop === that.scrollTop ){  
                        that.scroll_end = true;  
                        console.log(that.scroll_end,"是否结束",event.detail.scrollTop, "data", that.scrollTop )  
                        clearTimeout(timer);  
                        timer = null;  // 处理回收   
                    }  
    
                }, 500)  
            },
    效果展示: 绑定的是 animate.css 的class class="{'animate__backOutRight': !scroll_end, 'animate__backInRight' : scroll_end }"
收起阅读 »

有人需要插件市场直播插件的UI模板吗?带货弹幕基础的美颜都有,便宜售出,跳楼价

插件市场 插件 直播

有人需要插件市场直播插件的UI模板吗?带货弹幕基础的美颜都有,可以自己改动
麻烦联系qq:1037606624, 便宜售出,跳楼价

有人需要插件市场直播插件的UI模板吗?带货弹幕基础的美颜都有,可以自己改动
麻烦联系qq:1037606624, 便宜售出,跳楼价

IOS平台hybrid模式发布后的版本页面空白

uniapp

如题,我在使用HBuilderX工具编译调试hybrid页面的时候页面显示正常,下面两张图片,一个是HBuilderX编译的,一个是正式版发布后的。

是我哪里没配置好吗,用的是WKWebview的内核了,感觉也不关内核事情,但线上的发布版本hybrid就是显示不了任何东西

继续阅读 »

如题,我在使用HBuilderX工具编译调试hybrid页面的时候页面显示正常,下面两张图片,一个是HBuilderX编译的,一个是正式版发布后的。

是我哪里没配置好吗,用的是WKWebview的内核了,感觉也不关内核事情,但线上的发布版本hybrid就是显示不了任何东西

收起阅读 »