小程序实现图片模糊预加载

导语

最近在做的小程序项目设计大量图片的展示,小程序已经提供了图片的懒加载功能,但是由于图片本身比较大加上要展示的图片比较多,如何以一个比较友好的方式展示未加载完成的过程就是一个必须解决的问题了。

思路

由于小程序没有提供 Image 这个 js 对象,所以在小程序中实现预加载不能直接像原生js 一样,直接使用 new Image()创建一个图片对象,只能在视图层创建图片,通过onLoad事件监听图片加载完成。

实现图片模糊加载的思路就是先加载一个目标图片的缩略图,缩略图的加载一般非常快可以忽略不计,缩略图加载完成之后以高斯模糊的形式展示,与此同时加载原图,原图加载完成后替代原缩略图,原图和缩略图需要设置相同的宽高。思路理清楚之后,开始码代码吧~

由于项目使用了Taro框架,下面的代码写法是React的写法,原生或者其他框架也可以参考,没有太大的出入,思路都是一样的。

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)它可以生成类似毛玻璃样式的图片,如下图:

登录后复制

0.png

了解了这个方法之后,就让我们来愉快的玩耍(写代码)吧~ 我们可以给这个效果添加一个小动画,让它看起来更有意思哦~

.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,强制触发重绘就可以了~~

推荐教程:《微信小程序》

以上就是小程序实现图片模糊预加载的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2728081.html

(0)
上一篇 2025年3月7日 23:52:32
下一篇 2025年2月18日 00:26:31

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 浅谈小程序如何实现tab卡片切换功能

    小程序如何实现tab卡片切换功能?本篇文章给大家介绍一下微信小程序实现tab卡片切换的方法,希望对大家有所帮助! 一、UI与交互 首先我们来看看要实现的ui模样和交互效果吧,下图是我们的一个入口,以下的每一个icon区域点击进去都会展示对应…

    2025年3月7日
    200
  • 聊聊怎么将小程序项目转为uni-app项目

    怎么将小程序项目转为uni-app项目?下面本篇文章给大家介绍一下微信小程序转化为uni-app项目的方法,希望对大家有所帮助!   之前自己做一个uni-app的项目的时候前端需要实现一个比较复杂的动态tab和swiper切换的功能,但是…

    2025年3月7日 编程技术
    200
  • Java语言中的微信小程序开发介绍

    微信小程序是一种轻量级的应用程序,可以在微信平台上运行,不需要下载安装,方便快捷。java语言作为一种广泛应用于企业级应用开发的语言,也可以用于微信小程序的开发。 在Java语言中,可以使用Spring Boot框架和第三方工具包来开发微信…

    编程技术 2025年3月7日
    200
  • 功能全面易上手 这款惠普 4825 很适合家用

    对于家庭用户来说,由于日常经常需要给孩子打印一些教辅材料,因此选购一款打印机会更为方便。今天给大家推荐这款惠普 4825 彩色喷墨一体机,其功能全面并且具有不错的打印品质,价格仅为 599 元,非常具有性价比,是家庭用户的理想之选。 功能全…

    2025年3月6日 互联网
    200
  • Python能开发微信小程序么

    python是可以开发小程序的。python可以做后端服务和小程序通讯,python可以写后端平台,提供api,微信小程序可以通过wx.request()调用这个api。 Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,…

    2025年3月5日
    200
  • 如何利用Golang技术开发出高效的小程序

    标题:利用Golang技术开发高效的小程序 在当今移动互联网时代,小程序已经成为了人们日常生活中不可或缺的一部分。小程序的快速加载速度、轻量级的体积以及便捷的操作体验,让用户能够方便地获取所需信息或服务。而如何利用Golang技术开发高效的…

    2025年3月1日
    200
  • Python对商城购物小程序的介绍

    本文给大家分享的是使用python实现的购物小程序的思路要求以及相关代码,非常的简单实用,有需要的小伙伴可以参考下 要求: 启动程序后,让用户输入工资,然后打印出带有序号的商品列表用户输入商品序号购买相应的商品,或者输入 ‘ q…

    编程技术 2025年2月27日
    200
  • Python实现购物车购物小程序

    这篇文章主要为大家详细介绍了python实现购物车购物小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 概要 按理说,我们入门的第一个小程序都应该是Hello World。因为比较简单,我这也就不做过多的演示 了。 下面是我写的一个…

    2025年2月27日
    200
  • 用Python编写简单的聊天程序教程

    实现思路 x01 服务端的建立 首先,在服务端,使用socket进行消息的接受,每接受一个socket的请求,就开启一个新的线程来管理消息的分发与接受,同时,又存在一个handler来管理所有的线程,从而实现对聊天室的各种功能的处理 x02…

    2025年2月26日 编程技术
    200
  • 使用Python开发微信小程序

    随着移动互联网技术和智能手机的普及,微信成为了人们生活中不可或缺的一个应用。而微信小程序则让人们可以在不需要下载安装应用的情况下,直接使用小程序来解决一些简单的需求。 本文将介绍如何使用Python来开发微信小程序。 一、准备工作 在使用P…

    编程技术 2025年2月26日
    200

发表回复

登录后才能评论