作者:-林之涵_396 | 来源:互联网 | 2023-10-11 15:25
web前端|js教程小程序web前端-js教程导语软文自助平台源码下载,vscode插件折叠代码,ubuntu配置路径,tomcat发布错误,易语言sqlite大量读取,厕所里的爬
web前端|js教程
小程序
web前端-js教程
导语软文自助平台源码下载,vscode 插件折叠代码,ubuntu配置路径,tomcat发布错误,易语言sqlite大量读取,厕所里的爬虫从哪儿出来,php 随机输出,广州seo广告收费,大红色网站,大学网页模板源代码,css左侧固定右侧自适应模板下载lzw
最近在做的小程序项目设计大量图片的展示,小程序已经提供了图片的懒加载功能,但是由于图片本身比较大加上要展示的图片比较多,如何以一个比较友好的方式展示未加载完成的过程就是一个必须解决的问题了。
java ssm项目源码,ubuntu重启关机失效,tomcat修改访问项目名,可怕的爬虫,PHP题库免费答案APP,临潼seolzw
思路如何复制网页源码,vscode多人统一配置,ubuntu cmd终止,tomcat查看缓存文件,ios爬虫sign,php 抓取页面内容,余杭seo优化关键词,源码商城网站源码,phpcms添加单网页模板lzw
由于小程序没有提供 Image 这个 js 对象,所以在小程序中实现预加载不能直接像原生js 一样,直接使用 new Image()创建一个图片对象,只能在视图层创建图片,通过onLoad事件监听图片加载完成。
实现图片模糊加载的思路就是先加载一个目标图片的缩略图,缩略图的加载一般非常快可以忽略不计,缩略图加载完成之后以高斯模糊的形式展示,与此同时加载原图,原图加载完成后替代原缩略图,原图和缩略图需要设置相同的宽高。
思路理清楚之后,开始码代码吧~
imgLoader.js(以下为部分代码)
// 监听原图加载完成 toggleOriginLoaded() { this.setState({ loaded: true }); } // 监听缩略图加载完成 toggleThumbLoaded() { this.setState({ thumbLoaded: true }); } render() { let { loaded, thumbLoaded } = this.state; let { imgU, imgW, imgH } = this.props; // 根据传入的宽高设置缩略图和原图的宽高 let style = { width: imgW + 'rpx', height: imgH + 'rpx' } return ( {thumbLoaded && ( )} ); }
以上为主要视图层和逻辑层代码,其中compressImage函数是用来处理图片剪裁也就是缩略图的生成的,(ps:我们是用nginx实现的动态压缩,裁剪等功能,有需要的小伙伴可以自行搜索相关教学~)
主要逻辑处理完成之后我们再来看模糊样式的处理,在此就要介绍一个 css 方法 blur()。
blur() CSS方法将高斯模糊应用于输出图片。它只有一个接受一个参数blur(radius)
radius 表示模糊的半径,值为length。 它定义了高斯函数的标准偏差值,即屏幕上有多少像素相互融合; 因此,较大的值会产生更多模糊。值为0会使输入保持不变。 该值为空则为0。(来自MDN)它可以生成类似毛玻璃样式的图片,如下图:
了解了这个方法之后,就让我们来愉快的玩耍(写代码)吧~ 我们可以给这个效果添加一个小动画,让它看起来更有意思哦~
.image--not-loaded{ // fix ios 缺少重绘的问题,添加无意义的transform强制触发重绘 transform: scale(1); filter:blur(30px);}.image--is-loaded{ // fix ios 缺少重绘的问题,添加无意义的transform强制触发重绘 transform: scale(1); filter:blur(20px); animation: sharpen 0.8s both;}@keyframes sharpen { 0% { filter: blur(20px); } 100% { filter: blur(0px); }}
需要注意的是blur方法在ios上会出现无法正确展示的问题,查询了相关文章后发现是因为ios 缺少重绘,就是ios不会根据这个代码重新绘制页面因此不能正确展示,如果要解决这个问题只要给他加上一条没有意义的transform,强制触发重绘就可以了~~
推荐教学:《微信小程序》