实现一个vue单页面滚动懒加载的插件
开发工具用的HBuilderX
1.先引入组件不然会报错
在标签中加入v-lazy-container = "{ selector: 'img' }"
后续修改了一个问题(懒加载失效)加上这段css:
没加之前:
加了之后实现滚动加载:
实现效果图可滚动加载:
实现懒加载滚动效果
完整代码如下:
<!DOCTYPE html>
<html lang="zh-cmn-Hans">
<head>
<meta charset="UTF-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, minimum-scale=1, maximum-scale=1, user-scalable=no,viewport-fit=cover" />
<script src="http://f.zsbab.com/f/610066/file/js/vue.js"></script>
<!-- 引入vue-lazyload懒加载组件 -->
<script src="https://unpkg.com/vue-lazyload@1.3.3/vue-lazyload.js"></script>
<style type="text/css">
[v-cloak] {
display: none;
}
img {
display: block;
/*由于源数据没有高度,导致懒加载无效,添加最小高度进行占位*/
min-height: 300px;
}
/*在加载完成时取消最小高度,避免拉伸*/
img[ lazy=loaded] {
min-height: auto;
}
</style>
</head>
<body>
<div id="app" v-cloak>
<!-- <div v-html="dataInfo.dusmi_id"></div> -->
<div style="letter-spacing: 2px;">{{dataInfo.dusmi_title}}</div>
<div style="font-size: 12px;">{{dataInfo.date}} {{dataInfo.time}}</div>
<!-- <div>{{dataInfo.dusmi_desc}}</div> -->
<div v-html="dataInfo.dusmi_content" v-lazy-container="{ selector: 'img'}"></div>
</div>
<script type="text/javascript" src="./data.json"></script>
<script type="text/javascript">
'use strict';
Vue.use(VueLazyload) //注册该组件
new Vue({
el: '#app',
data: {
dataInfo: {}
},
created() {
var that = this;
},
mounted() {
this.getDateInfo(); //获取数据值
},
methods: {
/**
* 获取数据值
*/
getDateInfo() {
this.dataInfo = jsonData; //赋值
//把图片的src替换为data-src
this.dataInfo.dusmi_content = this.dataInfo.dusmi_content.replace(/src/g, "data-src");
this.dataInfo.dusmi_push_time = this.dataInfo.dusmi_push_time.split(' ');
//日期 yy-mm-dd换成 yy/mm/dd
var date = this.dataInfo.dusmi_push_time[0];
var dateStr = this.dataInfo.dusmi_push_time[0].replace(/-/g, "/");
//时间获取小时和分钟
var time = this.dataInfo.dusmi_push_time[1]
var timeArr = time.split(':');
var timeStr = timeArr[0] + ':' + timeArr[1];
// console.info(date, dateStr, time, timeArr, timeStr)
this.dataInfo.date = dateStr;
this.dataInfo.time = timeStr;
},
appSource: function() {
var u = navigator.userAgent;
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
if (isiOS) {
this.barHeight = true
return "ios";
} else {
return "andriod";
}
}
}
})
</script>
</body>
</html>
Json数据如下:
var jsonData = {
"dusmi_id": 123456789,
"dusmi_push_time": "2022-10-04 10:00:09",
"dusmi_title": "系统消息标题",
"dusmi_desc": "系统消息备注",
"dusmi_content": " <p style=\"text-align: center;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623839972604432_5544.jpg?v=1665623840\"\n style=\"max-width:100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623840222765767_7577.jpg?v=1665623840\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623840387826476_9955.jpg?v=1665623840\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623840564652821_2429.jpg?v=1665623840\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623840737006310_1423.jpg?v=1665623840\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623840923138904_6422.jpg?v=1665623841\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623841112860137_3511.jpg?v=1665623841\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623841308319297_1203.jpg?v=1665623841\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623841514952473_3156.jpg?v=1665623841\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623841725503364_7843.jpg?v=1665623841\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623841928260187_4197.jpg?v=1665623842\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623842179947741_2419.jpg?v=1665623842\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623842425401092_6493.jpg?v=1665623842\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623842649991565_2940.jpg?v=1665623842\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623842881340338_5947.jpg?v=1665623842\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623843056290719_6734.jpg?v=1665623843\"\n style=\"text-align: left; max-width: 100%;\"><img\n src=\"http://f.zsbab.com/f/730000/img/730012/product/basicinfo/1145936457_1665623843185623282_1699.jpg?v=1665623843\"\n style=\"text-align: left; max-width: 100%;\"><br></p>"
}