首页 > 其他分享 >一个有趣的图片加载效果

一个有趣的图片加载效果

时间:2023-04-26 19:32:29浏览次数:31  
标签:效果 image pixelated 图像 有趣 加载 图片

日常在业务中会经常使用到图片,而涉及到一些大图的加载等待的时间较长,一般为了用户更好的体验,会使用一些不同的图片加载效果,比如以下几种情况:

  1. 骨架屏:在页面上用占位框架代替图片,展示出图片的大致结构和区域,给用户一种“正在加载”的视觉体验。

  2. 进度条:用进度条的形式展示图片的加载进度,让用户能够了解图片的加载情况。

  3. 旋转动画:使用旋转的图标或者动画展示图片正在加载的状态,给用户一个视觉上的反馈。

  4. 模糊淡入:先展示一个高斯模糊的小图或者低分辨率的图片,等大图加载完成后再替换成高清的图片。

当然每种情况都有对应的利与弊,所适用的场景也有所不同,今天看到一个很有创意的图片加载效果,针对一些特定的场景和图片内容效果感觉很不错。以下是加载的效果图:

注意:以下本文讨论的加载效果不太适用于图片的第一次加载,只是一种交互效果供参考

整体的加载效果就是图片被横向拉伸了一样,随着加载的过程图片内容逐渐显示出来,这对于一些图片背景中包含纯色的情况下的效果更好,因为纯色部分不管怎么拉伸也是纯色,只有其他颜色在拉伸的过程中会交织在一起,随着加载的过程逐渐看到庐山真面目,不得不说这是一个不错的交互的效果。

image-rendering: pixelated

这就是今天的主角,image-rendering: pixelated 是一种 CSS 属性,用于控制图像在缩放或拉伸时的显示方式。设置为 pixelated 后,浏览器会以最接近原始图像的方式呈现缩放后的图像,使得图像看起来像是由像素点组成的。这种方式与传统的平滑缩放方式不同,可以更好地展现像素风格的图像,例如像素艺术作品、游戏素材等。简单来说这个 pixelated 可以让图片变成像素风,也就是马赛克的效果

image-rendering 属性可以控制图像在缩放或拉伸时的显示方式,常见的属性值有以下几种:

  1. auto: 默认值,浏览器会根据具体情况自动选择合适的显示方式进行呈现。

  2. crisp-edges: 将图像呈现为锐利的边缘,效果类似于将图像强行放大或缩小到整数像素的尺寸。

  3. pixelated: 以原始图像最接近的方式呈现缩放后的图像,使得图像看起来像是由像素点组成的。

今天主要介绍的是 pixelated,简单实用比如给一下图片设置 pixelated 后的效果和原图对比就可以清晰的看到马赛克像素化的效果。

.pixelated {
  image-rendering: pixelated;
}

tips: 要达到马赛克效果前需要将图片放大至模糊的效果才会生效,如果本质是清晰的图片是无法生效的,这里是将正常的图片缩小再设置更大的宽高后进行设置 pixelated

观察这个效果和本文一开始的飞机加载效果之间似乎并没有什么明显的联系。这里使用了一个巧妙的实现方式,我们使用的图片内容主要都是横向排列的,从左到右逐渐加载。仔细观察可以发现,加载过渡区域的内容是基于当前纵向切面的像素点颜色值计算的。当我们不断向右移动时,对应像素点的颜色值也会不断变化,从而导致加载横条的颜色内容不断变化。下面这张示例图表现了这种效果更加明显:

这里其实是用到了scale进行放大,但是只放大了X轴,所有效果就是被横向拉的很长。

transform: scale(6000, 1);

那么这段代码怎么应用生效呢?

这里需要再引入一个知识点,以下引用来源于 mozilla

CSS 属性 image-rendering 用于设置图像缩放算法。它适用于元素本身,适用于元素其他属性中的图像,也应用于子元素。

重点是也应用于子元素。所以我们基于当前的图片元素扩展一个伪元素,在伪元素进行 pixelated 属性设置,核心代码如下:

.thing::after {
  left: 300px;
  transform-origin: 0 0;
  transform: scale(6000, 1);
  image-rendering: pixelated;
  transition: all 2s cubic-bezier(.5,0,0,1) ;
}

.thing:hover::after{
  left: 720px;
}

伪元素默认设置了 300px 的偏移量,鼠标悬停时设置为 720px,再配合 transition 即可产生动起来的效果,但这时候伪元素的色值是基于图片最左侧的色值不会有变化,如下所示:

所以这个时候还需要增加另一个属性 background-position 上场,要让伪元素运动时对应上图片上的纵向色值,所以增加 background-positionleft 的数值一样,这里需要注意的是我们是要将伪元素的背景向左移动,所以是设置负数,代码如下:

.thing:after {  
  background-position: -300px 0;
}

.thing:hover:after{
  background-position: -720px 0;
}

最后来看一下不同的图片遇上后的新奇效果,当下面这种图片遇上从左往右逐渐显示的效果后会产生另一种不错的感觉。

使用 pixelated 后的效果,本来界面上的曲线变成了直线逐渐延伸显示。

这个蜥蜴使用了纯色背景,所以在加载过程中拉伸是后也是纯色的,那么就剩下主体内容在发生变化,这也是一种不错的体验效果。

码上掘金在线体验:

https://code.juejin.cn/pen/7225892695250567223

参考:https://codepen.io/andyfitz/pen/XWxWgyY

最后

本文介绍了一个有趣的图片加载效果,主要使用了 image-rendering: pixelated 配合 background-position 产生的过渡加载效果。 加载效果不太适用于图片的第一次加载,只是一种交互效果供参考,针对不同的图片会产生别样的加载风格,比如上面的直线内容加载变为曲线,纯色背景的内容的加载只会有主体内容发生变化,有兴趣的可以尝试其他内容的图片也许你会发现新大陆。

看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)

标签:效果,image,pixelated,图像,有趣,加载,图片
From: https://blog.51cto.com/react/6228676

相关文章

  • element-ui el-dialog中引用组件,为何组件只加载一次
    最近开发项目,页面中引入组件,2次展示,组件中生命周期都不调取,导致网组件中传的值不更新;<el-dialogv-dialogDragtitle="巡检记录":visible.sync="patrolItemVisible":show-close="true":close-on-press-escape="true":close-on-click-modal="true":appen......
  • java excel带图片导入
    日常项目中使用easyExcel但是easyExcel不支持带图片的excel导入,后面通过网络查找,再加上询问技术经理终于解决,大前提是图片在excel中不是嵌入的,需要悬浮才可以读取。代码如下引用jar包为<!--需要2.10版本及以上不然excel缺少工具类--><dependency><groupId>com......
  • 第二十三章:动态加载脚本和样式
    学习要点:1.元素位置2.动态脚本3.动态样式本章主要讲解上一章剩余的获取位置的DOM方法、动态加载脚本和样式。一.元素位置上一章已经通过几组属性可以获取元素所需的位置,那么这节课补充一个DOM的方法:getBoundingClientRect()。这个方法返回一个矩形对象,包含四个属性:left、top、ri......
  • vue-router4 配置懒加载 页面加载时展示loading
     懒加载写法{path:"/",name:"index",component:()=>import("../views/Home.vue"),}创建Loading组件并引入到顶层组件中使用store控制loading组件是否展示包装懒加载写法constlazyLoad=(componentPath)=>{//注意:componentPath不......
  • SuperTools是一款图片处理工具,提供图片压缩、图像识别等功能
    SuperTools是一款非常实用工具,既能压缩图片,也能识别图像文字,具有很高使用价值,由天津雍博科技有限责任公司提供技术支持服务。访问网址:tool.yongbosoft.com欢迎大家试用品鉴,也请大家提出宝贵意见注意:目前SuperTools仅支持电脑PC端的图像处理。工具首页  登录首页图片压......
  • cesium-1-加载影像数据和影像数据基础知识
    1、影像数据的图层类有哪些viewer-->imageryLayers(ImageryLayerCollection类型)-->ImageryLayer类型-->ImageryProvider抽象类viewer下有ImageryLayerCollection类型的imageryLayers用来存放影像数据(可多个),只能是ImageryLayer类型变量(包含影像数据但除了影像数据之外还有......
  • 不同语言加载不同字号,设置到资源文件中,进行引用
    在资源文件夹创建一个类在App.xaml文件中引用这个类的空间命名,并把这个类添加到资源在页面中应用在使用其他语言时,开启新的子线程依然会使用区域语言.net4.5后使用可以一次性解决varculture=newCultureInfo("en-US");    CultureInfo.DefaultThreadCurrent......
  • 类加载器
    类与类加载器任意一个类,都由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都有一个独立的类名称空间。因此,比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一个虚拟......
  • 类加载机制
    什么是类加载机制Java虚拟机在把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程称作虚拟机的类加载机制。类加载的时机一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,他的整个生命周期将会经历以......
  • Citrix XenDesktop 2203实现只允许图片从客户端拷贝至云桌面
    一、前言最近遇到个别客户需求,要求只允许从本地拷贝图片至云桌面,禁止其他文件、文字拷贝,禁止从VDA拷贝任何数据到客户端本地。二、实现步骤1、只允许图片从客户端拷贝到云桌面会话剪贴板写入允许的格式---需要设置CF_BITMAP(图片)客户端剪贴板重定向------需要开启限制会话剪贴板......