html轮播图片代码(html轮播图片代码不用js)

  知乎和 Medium 都用了 progressive image (渐进式图片加载),用低分辨率的模糊图片来做预览图,代替以前懒加载图片时用的 logo 占位图。预览图大小也在平均 2KB~3KB 之间,虽然 cdn 流量上有所增加,但用户体验却非常好。

  知乎和 Medium 使用的是动态绘制 canvas 这种比较复杂的方式来展现模糊效果,所以来实现一个只需要 HTML、CSS、JS 就能实现的渐进式图片加载。

  代码已经封装

  GitHub 地址:https://github.com/ccforward/progressive-image

  NPM 地址:https://www.npmjs.com/package/progressive-image

  先看简单例子 demo:https://ccforward.github.io/progressive-image/example/index.html

  01HTML

  基本的 HTML 结构如下

  <div class="progressive"> <img class="preview lazy" data-src="origin.jpg" src="preview.jpg" /></div>

  origin.jpg 就是原图,preview.jpg 是等比压缩后的预览图,比如原图是 400x200 则预览图可以使 20x10。

  如果原图是 400x100 按照 4:1 的比例,预览图如果宽度是30,那么高度就是 7.5,所以图片裁剪这里会有坑,后面会遇到。

  02CSS

  容器的基本样式

  .progressive { position: relative; display: block; overflow: hidden;}

  外层的 .progressive 默认是 div 也可以是其他任何需要的包裹元素

  图片容器可以是固定尺寸,也可以是固定的宽高比(用 padding-top 的方式来确保容器的固定的宽高比例),这就保证了原始图片加载之后不会出现容器尺寸的变化,然而这就必须计算每张图片的宽高比例。

  知乎和 Meduim 都是获取到了原图尺寸,然后保持预览图(canvas)也是相同的尺寸,这样即使预览图被裁剪后和原图尺寸的比例不一致,也不会出现容器尺寸在原图加载之后会抖动的bug。

  我们退而求其次,采取更简单粗暴的方式来做:

预览图和原始图尽量保持相同的宽高比

原图加载完后,不删除预览图,而是设置为 opacity:0

  PS: 如果预览图和原图的比例不一致,同时原图加载后删除预览图,就会出现抖动,如下图

  原图尺寸 800x533 裁剪后如果按照比例应该是 20x13.325 但实际是 20x13 ,所以加载原图后空间不够,往下伸展出一部分。因此为了防止抖动的简单处理就加上第二点:不删除原图并设置为透明。

  容器内图片

  预览图和原图都充满容器

  .progressive img { display: block; width: 100%; max-width: 100%; height: auto; border: 0none;}

  预览图模糊处理

blur(2vw) 是为了保持相同的模糊度,而页面的尺寸无关。

transform: scale(1.05); 添加图片过渡动画

.progressive img.preview { filter: blur(2vw); transform: scale(1.05); }

  原图局对定位于容器左上角,是为了在动画阶段能覆盖原图。

  .progressive img.origin { position: absolute; left: 0; top: 0; animation: origin 1s ease-out;}@keyframes origin { 0% { transform: scale(1.1); opacity: 0; } 100% { transform: scale(1); opacity: 1; }}

  03Java

html轮播图片代码(html轮播图片代码不用js),html轮播图片代码(html轮播图片代码不用js),html轮播图片代码,文章,浏览器,html,第1张

  js的处理就简单多了,和懒加载图片没什么区别,主要一个 checkImage 函数在 DOMReady 和 scroll 时检测可视区 view 内是否有图片需要懒加载

  以及 loadImage 函数用来替换预览图,加载原图触发动画。

  function checkImage() { const lazys = document.querySelectorAll('img.lazy') const l = lazys.length if(l>0){ for(var i = 0; i < l; i++) { var rect = lazys[i].getBoundingClientRect() if(rect.top < window.innerHeight && rect.bottom > 0&& rect.left < window.innerWidth && rect.right > 0) { loadImage(lazys[i]) } } }else{ events(window, false) }}

  04响应式图片

  demo 里最后一张图片用了响应式图片

  data-srcset="./progressive/4.jpg 960w, ./progressive/4-m.jpg 1280w, ./progressive/4-l.jpg 1920w"

  <div class="progressive full"> <img class="preview lazy" data-src="./progressive/4.jpg" src="./progressive/r4.jpg" /> </div>

  浏览器如果支持 img 标签的 srcset 将会根据 viewport 的宽度选取适当的图片来加载。

  05封装代码

  JS

  代码封装为 原生js 和 Vue.js 两种

  原生js为一个 Class ,实例化后直接使用,封装后 140 左右的代码

  index.js(https://github.com/ccforward/progressive-image/blob/master/src/index.js)

  Vue.js 版本为一个 v-progress 的指令,只要在需要的 img 标签上添加即可,总共 190 行左右的代码

  index-vue,js(https://github.com/ccforward/progressive-image/blob/master/src/index-vue.js)

  CSS

  抽取用于动画的 css 样式,写成 stylus 总共才 36 行

  index.styl(https://github.com/ccforward/progressive-image/blob/master/src/index.styl)

  GitHub、demo

  仓库的 README.md 文件有详细的使用说明

  GitHub 地址(https://github.com/ccforward/progressive-image)

  NPM 地址(https://www.npmjs.com/package/progressive-image)

  vue-demo(https://ccforward.github.io/progressive-image/example/demo-vue.html)

  原生js-demo(https://ccforward.github.io/progressive-image/index.html)

  06图片裁剪

  多数 cdn 都会提供图片上传后裁剪的功能

  node.js 有一个很好用的图片裁剪模块 gm

  裁剪代码也很简单:

  const gm = require('gm')gm('./coding.jpg').resize(20).write('r.jpg', function (err) { err && console.log(err)})

  对于简单裁剪 PHP 直接用 gd 库, python 可以用 pillow 库解决。

? ? ? ? ? ? ? ?

  作者:ccforward

  原文:https://github.com/ccforward/cc/issues/64

  点击“阅读原文”,看更多

  精选文章

↓↓↓


【免责声明】:

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。

【关于转载】:

本站尊重互联网版权体系,本站部分图片、文章大部分转载于互联网、所有内容不代表本站观点、不对文章中的任何观点负责、转载的目的只用于给网民提供信息阅读,无任何商业用途,所有内容版权归原作者所有
如本站(文章、内容、图片、视频)任何资料有侵权,先说声抱歉;麻烦您请联系请后台提交工单,我们会立即删除、维护您的权益。非常感谢您的理解。

【附】:

二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!

注:本站资源来自网络转载,版权归原作者和公司所有,如果有侵犯到您的权益,请第一时间联系我们处理!

-----------------------------------------------------------------------------------------------------------

【版权声明】:

一、本站致力于为源码爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、如有内容侵犯您的版权或其他利益的,请编辑邮件并加以说明发送到站长邮箱。站长会进行审查之后,情况属实的会在三个工作日内为您删除。
-----------------------------------------------------------------------------------------------------------


内容投诉
源码村资源网 » html轮播图片代码(html轮播图片代码不用js)

1 评论

您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论