之前在项目中使用vue-cli scrollTop开发过 网站右侧楼层导航效果折腾小记 ,现在测试说有一个bug,那会就是有些页面一直报错
经过筛查发现是scroll报的错,发现即使在某些页面为没有使用组件,也会抱着个错,于是就开始研究,发现
windowaddEventListener("scroll", thismyScroll); 是基于 windos 对象的,所以在整个项目都会监听,最后想到vue的一个生命周期 destroyed ,那就是在组件销毁时也取消 removeEventListener 监听,这样就好了。
多多折腾,多多学习。有什么不对的地方,评论区评论。大家一块进步。
# queryselector只能用在mounted以后的钩子里面,在created的时候还没有页面元素被加载,所以获取的话会直接报错
#给页面设置scrollTop时必须要启用一个异步读取函数setTimeout(),要不然获取到的就是0或者undefined
使用kbone开发的微信小程序,只需要做稍微的修改就可以用到 web 端和 qq 小程序,很方便。
因为我之前的项目工程化程度很高,所以在刚开始用的时候因为惯性思维遇到了一些问题。
在 kbone + vue 的项目中可以使用 vue-router,但是web用一个router文件,小程序的 router 要另写。
我们在官方给出的 vue 项目模版的基础上做了一些目录调整:
现在我们要新增一个页面,文章详情页面, /article/:id ,首先我们需要在 src/article/mp/mainmpjs 中添加路由:
这里要注意:
tabbar 的配置主要写在 miniprogramconfigjs 中的 generate 属性里:
这里要注意:
所有 tabbar 的页面在注册路由时,需要有一个 / 路径,比如,我们把 article 页面作为一个 tab 页,那么我们需要改写一下注册的路由写法:
因为在微信小程序中不能直接使用 axios ,需要用 wxrequest ,而 web 端不能用 wxrequest ,所以我们需要找一个在 web 端和小程序上都能进行正常网络请求的方案。这里我们采用了 axios + adapter ,即 axios-miniprogram-adapter 。
使用的时候注意做一下环境判断:
微信小程序和qq小程序都可以用官方推荐的 rpx 做适配,我们要做的是对 web 端做一下兼容。
我们可以在 webpack 中的 sass-loader 里写一个全局变量 $isMini 做环境的区分,然后我们就可以写一个转换设计稿尺寸的方法,在这个方法里借助前面注册的变量进行尺寸转换(假设设计稿是 750px 宽的):
这里要注意的是 rpx 和 px 的转换关系,以 iphone6 为例: 750rpx = 375px。
微信小程序也支持 rem,设置的时候需要在 miniprogramconfigjs 的 global 字段中配置:
因为我们用的是 sass,而官方模版用的是 less,这里就顺便提一下,如果要用 sass,记得要在 build 目录下的各个 webpack 文件中进行对应的 loader 配置哦。
这个库可以在小程序和 web 端都能正常使用。
要注意的是使用的时候,不要忘记引入样式文件哦:
刚接触小程序的朋友还可以看一下微信原生组件的使用,因为 kbone-ui 的文档写的不是很详细,有些还是结合原生组件的文档好理解一点。
包括内置组件的使用,也可以结合原生组件的文档使用。
微信小程序现在支持单页面自定义导航,但是 kbone 如果要自定义导航,所有页面的导航都需要自己写。
导航条分为两部分,statusbar(显示时间的部分)和 titlebar (标题栏)。
statusbar 的高度:
titlebar 的高度:
导航条的高度:
如果是用在微信小程序上,那么现在这两个 api 的使用时机不需要特别注意,但如果是同时要用在qq小程序上,就需要注意使用的时机啦,如果直接在计算属性或者 created 中使用会出现报错,取不到内容的情况。
我是在created 中用了 settimeout 延迟使用这两个 api来解决这个问题的。
getMenuBarRect 这个方法是参考了网上找到的一个作者的方法,做了点修改,修改后可以正常使用,但是有个问题,因为 systeminfo 一开始取不到值,会用默认值,后来取到正确值时自定义头部的高度会有个突变,就是会跳一下。这个还没有优化。
比如,自定义分享内容的path要写全;
appid在微信小程序里叫appid,在qq小程序配置里叫qqappid;
微信小程序可以只设置宽度不设置高度,这样不会变形;
qq小程序只设置宽度不设置高度,会显示不出来,需要加属性 mode="widthFix" ;
页面的下拉刷新、加载中提示、上拉加载更多等配置需要在miniprogramconfigjs 里配置;
全局滚动事件也需要先配置,才能用 windowaddEventListener('scroll', () => {})
而且要取到 scrolltop 要用 documentbody$$getBoundingClientRect ;
总而言之呢就是多看文档、仔细看文档啦。
windowopen相当于 navigateTo,页面打开方式为 open;
windowlocationhref相当于redirectTo,页面打开方式为 jump;
不可否认它确实有很多方便的地方,但是在样式方面和组件支持方面简直令人抓狂。另外,编译速度和开发者工具都很慢。真的是一言难尽。今天又是修bug的一天,修到吐。
html2canvas: 将dom元素转为一张
1,装包: npm install --save html2canvas
2,导入: import html2canvas from 'html2canvas';
3,如果该盒子里面有从后台请求回来的路径 可能会存在跨域情况
img标签里加上 crossorigin='anonymous'
html2canvas方法里 加上useCORS: true,
如果再不行 就在路径后面加个时间戳 :url+'time='+new Date()valueOf()
```
toImage() {
windowpageYOffset = 0
documentdocumentElementscrollTop = 0
documentbodyscrollTop = 0
html2canvas(this$refsqrcode,{
useCORS:true,
windowWidth: documentbodyscrollWidth,
windowHeight: documentbodyscrollHeight,
x: documentgetElementById('qrcode')offsetLeft,
y: documentgetElementById('qrcode')offsetTop,
scale: 2,
})then(canvas => {
let dataURL = canvastoDataURL("image/png");
thisimgUrl = dataURL;
if(thisimgUrl) {
thisshow =true
thisloadingclose();
}
})catch(err => {
thisloadingclose();
});
},
```
4, html2canvas(要转成的元素,对象-最终的属性)
useCORS: 表示允许跨域
windowWidth,windowHeight,x,y, 是解决最终顶部或底部的空白区域
5, scale -- 清晰度
如下所示:
this$nextTick(()
=>
{
const
el
=
documentquerySelector('act-not');
const
offsetHeight
=
eloffsetHeight;
elonscroll
=
()
=>
{
const
scrollTop
=
elscrollTop;
const
scrollHeight
=
elscrollHeight;
if
((offsetHeight
+
scrollTop)
-
scrollHeight
>=
-1)
{
//
需要执行的代码
}
};
});
坑:在做滚动加载分页时候,有时候第三方的d窗如elementui
会出问题
,这时候需要watch变量d窗关闭时修改elscrollTop=0即可。
以上这篇vue
监听某个div垂直滚动条下拉到底部的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:vue
纯js监听滚动条到底部的实例讲解vue
中滚动条始终定位在底部的方法vue实现动态添加数据滚动条自动滚动到底部的示例代码Vue下滚动到页面底部无限加载数据的示例代码vue监听滚动事件实现滚动监听vue
每次渲染完页面后div的滚动条保持在最底部的方法
以上就是关于vue-scrollTop 监听scrolltop在未应用页面报错bug解决小记全部的内容,包括:vue-scrollTop 监听scrolltop在未应用页面报错bug解决小记、VUE遇到的坑----queryselector选择器的问题、kbone + vue 问题集合等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)