博主彼岸临窗的博客主题做得非常简约漂亮,虽然生活类文章更新不多,但我有时候总喜欢光顾它,不为别的,享受这个体验的过程。
博主也很热心,还免费共享了主题代码,于是,我也就借用了不少资源过来,比如回复 emoji 表情,这里要说的是懒加载图片,真的体验感极强,借花献佛也分享出来吧。
一、添加懒加载图片标签
懒加载图片是作为标签背景,通过处理 .lazy-load
和 .loaded
类以及 data-src
属性来实现。其中 .loaded
是加载完成后通过 js 添加的。
<div class="lazy-load " data-src="/webpath/to/img">
</div>
二、添加 lazy-load 样式
主要是指定背景图片cover属性,以及加载过程中的模糊渐变动态处理
/* 懒加载样式 */
.lazy-load {
/* 默认背景图 */
/* background-image: url(./images/bgdemo/ad_2.jpg); */
width: 100%;
height: 100%;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
overflow: hidden;
transition: .5s ease-in-out opacity;
-webkit-transition: .5s ease-in-out opacity;
filter: blur(35px);
mask: radial-gradient(circle at center, white 100%, transparent 100%);
-webkit-mask: radial-gradient(circle at center, white 100%, transparent 100%);
}
.loaded {
filter: blur(0px);
opacity: 1;
transition: .5s filter linear, .5s -webkit-filter linear;
}
/* 懒加载结束 */
三、添加懒加载 js 函数
// 懒加载逻辑
function initLazyLoad() {
const lazyImages = document.querySelectorAll(".lazy-load:not(.loaded)");
const lazyLoad = (target) => {
const io = new IntersectionObserver(
(entries, observer) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
const img = entry.target;
const src = img.getAttribute("data-src");
if (src) {
const tempImg = new Image();
tempImg.src = src;
tempImg.onload = () => {
img.style.backgroundImage = `url('${src}')`;
img.classList.add("loaded");
observer.unobserve(img);
};
tempImg.onerror = () => {
console.error("图片加载失败:", src);
};
}
}
});
},
{
rootMargin: "0px",
threshold: 0.1,
}
);
io.observe(target);
};
lazyImages.forEach(lazyLoad);
}
四、在需要懒加载的地方调用 js 函数进行加载
通常在页面初始化或者加载期间执行
// 初始化懒加载
initLazyLoad();
放大盒子呢是插件吗
是指的图片灯箱效果吗?用的是fancybox通过引用js文件然后简单配置就可实现。
看了这个博主的主题样式很喜欢,但我不是typecho。
我是用的插件实现的懒加载。
如果不是为了个性化功能的需求,我直接就会用他开源的主题了。
这加载动画很酷啊
依样画葫芦,从彼岸临窗博客站点抄来的,包括这个留言栏风格
大佬您的站点做的非常不错,内容也很丰富的。
请假博主的字体,是原生的字体嘛?还是引入别的,挺舒服的。我站点就看的有些方方正正。
就用的原生字体,加了个 antialiased 效果。
博主这个站的首页加载也很漂亮,也是种享受
代码实现99%参考了彼岸临窗的站点 🙊