VUE分页配置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="https://unpkg.com/vant@2.12/lib/index.css" />
<script src="https://unpkg.com/vue@2.6/dist/vue.min.js"></script>
<script src="https://unpkg.com/vant@2.12/lib/vant.min.js"></script>
<script src="https://lib.baomitu.com/jquery/1.12.4/jquery.min.js"></script>
<style>
.dlineui_header {
width: 100%;
line-height: 40px;
background: #fff;
}
.dlineui_header .header_box {
display: flex;
justify-content: space-between;
}
.box_check {
padding: 10px;
}
.box_check .van-checkbox__icon {
background: #fff;
border-radius: 50px;
}
.content {
padding-bottom: 60px;
}
.content .content_box {
width: 95%;
margin: 0 auto;
margin-top: 10px;
border-radius: 10px;
background: #fff;
padding: 10px;
display: flex;
align-items: center;
height: 50px;
}
.content .content_box .img {
width: 40px;
height: 40px;
border-radius: 5px;
overflow: hidden;
margin-right: 5px;
}
.avatar_Wrap {
width: 40px;
height: 40px;
border-radius: 5px;
}
.avatar_Wrap .avatar {
width: 100%;
height: 100%;
}
.content .content_box .content_box_time {
display: flex;
justify-content: space-between;
padding: 10px 10px;
border-radius: 5px;
}
.title {
flex: 1;
margin-left: 10px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.van-search {
padding: 10px 0;
}
.van-search .van-search__content {
border-radius: 50px;
background-color: #edf0f8;
}
.time {
text-align: right;
padding-left: 15px;
color: #919191;
font-size: 16px;
}
.bottom {
position: fixed;
bottom: 0;
width: 100%;
max-width: 640px;
margin: 0 auto;
height: 60px;
font-size: 18px;
text-align: center;
background: #fff;
display: flex;
justify-content: center;
align-items: center;
}
.find .van-cell {
width: 90%;
margin: 0 auto;
background: #eee;
border-radius: 50px;
line-height: 15px;
}
</style>
</head>
<script>
$("#header .header_title").html("发放证书");
$("title").html("发放证书");
</script>
<body>
<div id="app">
<van-sticky>
<div class="dlineui_header">
<div class="header_box" id="J_header_stype">
<div class="header_leftarea">
<div class="btn_back">
1
</div>
</div>
<div class="header_title">
<span>已报俱乐部</span>
</div>
<div></div>
</div>
<div class="top_seach">
<form action="">
<van-search v-model="keyword" :clearable="false" label="" placeholder="请输入搜索关键词" @search="onSearch">
<template #right-icon>
<van-icon name="clear" style="cursor: pointer;" @click="onclear" v-if="keyword != ''" />
</template>
</van-search>
</form>
</div>
</div>
</van-sticky>
<div class="box_check" style="display: flex;align-items: center;">
<van-checkbox v-model="checked">全选</van-checkbox>
<span style="color: #9d9d9d;margin-left: 20px;">已选 <span style="color: #ccc;">({{selectmamth}})</span></span>
</div>
<div class="content" style="height: 70vh;overflow: auto;" @scroll="loadImg($event)">
<div class="content_box" v-for="(it,id) in list" :key="it.id" @click="btncheck(it,id)">
<div style="margin-right:10px;">
<van-checkbox v-model="it.checked" @change="changechecked(it)"></van-checkbox>
</div>
<div class="img" v-if="it.logos">
<img :src="it.logos" alt="" srcset="" style="width: 100%;height: 100%;">
</div>
<div v-else class="avatar_Wrap">
<div class="avatar"></div>
</div>
<div class="title">
<div style="color: #383838;font-size: 14px;padding-bottom: 3px;word-wrap: break-word;word-break: break-all;">
{{it.name}}</div>
<div style="font-size: 14px;color: #919191;display: flex;justify-content: space-between;">
<span>已报 {{it.order_count}}</span>
<span>人数限制 {{it.join_peoplenumber}}</span>
<span style="color: #3370EE;">{{it.riding_distance_total}}KM</span>
</div>
</div>
</div>
</div>
<div class="bottom">
<van-button round type="info" block @click="btnshow">批量修改俱乐部参与人数上限</van-button>
</div>
<van-dialog v-model="show" title="人数限制" show-cancel-button @confirm="btn">
<div class="find" style="padding: 15px 0;">
<van-field v-model="maxvalue" label="" placeholder="请输入人数限制" />
</div>
</van-dialog>
</div>
</body>
<script>
new Vue({
el: '#app',
template: ``,
data: {
club: "<?php echo $one_club_id; ?>",
show: false,
maxvalue: '',
keyword: '',
checked: false,
page: 1,
page_size: 10,
list: [],
loading: false,
finished: false,
checkIds: []
},
watch: {
checked(val, value) {
if (val) {
this.list.forEach(it => it.checked = true);
} else {
this.list.forEach(it => it.checked = false);
}
}
},
computed: {
selectmamth() {
let num = 0
this.list.forEach(it => {
if (it.checked) {
num++
}
})
return num
},
},
mounted() {
this.getList(true);
},
methods: {
changechecked(it) {
const _this = this;
if (_this.checkIds.length > 0) {
const index = _this.checkIds.findIndex(item => item == it.id)
if (index < 0) {
_this.checkIds.push(it.id)
}else{
_this.checkIds.splice(index,1)
}
} else {
_this.checkIds.push(it.id)
}
console.log(_this.checkIds,789)
},
loadImg(event) {
const _this = this;
let el = event.target;
if (el.scrollTop + el.clientHeight >= el.scrollHeight) {
_this.page++;
if (_this.list.length < 10) {
_this.page = 1;
return;
} else {
_this.getList(false);
}
}
},
btncheck(it, id) {
if (it.checked) {
this.list[id].checked = false
} else {
this.list[id].checked = true
}
},
onSearch() {
const _this = this
_this.getList(true)
},
onclear() {
const _this = this
_this.keyword = ''
_this.getList(true)
},
getList(val) {
const _this = this
if (val) {
_this.page = 1
_this.list = []
_this.page_size = 10
}
$.ajax({
type: "get",
url: 'index.json',
beforeSend: function () { },
success: function (data) {
if (typeof data != "object") {
data = $.parseJSON(data);
}
if (data.status == 1) {
for (var i = 0; i < data.data.length; i++) {
data.data[i].checked = false
_this.list.push(data.data[i])
}
_this.loading = false;
if (data.data.length < _this.page_size) {
_this.finished = true;
} else {
_this.page++;
_this.finished = false;
}
if (_this.keyword == '') {
_this.checkIds && _this.checkIds.map((v, i) => {
const index = _this.list.findIndex(item => item.id == v)
if (index > -1) _this.list[index].checked = true;
})
}else{
_this.checkIds && _this.checkIds.map((v, i) => {
const index = _this.list.findIndex(item => item.id == v)
if (index > -1) _this.list[index].checked = true;
})
}
} else {
_this.finished = true;
_this.loading = false;
$.fn.poptips({
con: data.msg ? data.msg : '网络不稳定,请您稍后刷新重试',
btnOKClick: function () { }
});
}
},
error: function (data, status, e) {
_this.finished = true;
_this.loading = false;
}
});
},
btnshow() {
const _this = this
_this.show = true
},
btn() {
const _this = this
if (_this.maxvalue == '') {
$.fn.poptips({
con: '请输入人数限制',
btnOKClick: function () { }
});
return
}
let str = ''
_this.list.forEach(it => {
if (it.checked) {
str += it.id + ','
}
})
var tmp_params = {
activity_id: "<?php echo $activity_id; ?>",
user_ids: str,
club_id: _this.club,
}
$.ajax({
type: "POST",
datatype: "json",
url: "<?php echo site_url('Activity_riding/hand_to_cert'); ?>",
data: tmp_params,
beforeSend: function () { },
success: function (data) {
if (typeof data != "object") {
data = $.parseJSON(data);
}
if (data.status == 1) {
$.fn.poptips({
con: data.msg,
btnOKClick: function () {
_this.getList(true)
}
});
} else {
$.fn.poptips({
con: data.msg ? data.msg : '网络不稳定,请您稍后刷新重试',
btnOKClick: function () {
_this.getList(true)
}
});
}
},
error: function (data, status, e) {
return false;
}
});
}
},
});
Vue.use(vant.Lazyload);
</script>
</html>
{
"sql": 1,
"status": 1,
"data": [{
"aid": "176086",
"logos": "https:\/\/giant-images.oss-cn-shanghai.aliyuncs.com\/club\/club\/15833798925659344.jpg",
"name": "\u6377\u5b89\u7279\u9752\u5e74\u8defCYCLING WORLD",
"id": "1811",
"riding_distance_total": "337,499",
"order_count": "261"
}, {
"aid": "178429",
"logos": "https:\/\/club-static.giant.com.cn\/index\/club\/img\/logo.png",
"name": "\u5eca\u574a\u4f53\u80b2\u573a\u6377\u5b89\u7279\u4f53\u9a8c\u4e2d\u5fc3",
"id": "3797",
"riding_distance_total": "216,617",
"order_count": "222"
}, {
"aid": "176012",
"logos": "https:\/\/giant-images.oss-cn-shanghai.aliyuncs.com\/club\/club\/15842023713356087.jpg",
"name": "\u6d1b\u9633\u6377\u5b89\u7279\u9a91\u53cb\u9a7f\u7ad9\u5355\u8f66\u4ff1\u4e50\u90e8",
"id": "4147",
"riding_distance_total": "198,223",
"order_count": "137"
}, {
"aid": "178220",
"logos": "https:\/\/giant-images.oss-cn-shanghai.aliyuncs.com\/club\/club\/14846655282676040.jpg",
"name": "\u4e34\u6c7e\u6377\u5b89\u7279\u5355\u8f66\u4ff1\u4e50\u90e8",
"id": "587",
"riding_distance_total": "188,110",
"order_count": "177"
}, {
"aid": "178434",
"logos": "https:\/\/giant-images.oss-cn-shanghai.aliyuncs.com\/club\/club\/15702441233462988.jpg",
"name": "\u5043\u5e08\u6377\u5b89\u7279\u9a91\u53cb\u4ff1\u4e50\u90e8",
"id": "7164",
"riding_distance_total": "180,214",
"order_count": "68"
}, {
"aid": "178418",
"logos": "https:\/\/club-static.giant.com.cn\/index\/club\/img\/logo.png",
"name": "\u67a3\u5e84\u6377\u5b89\u7279\u65e0\u9650\u5355\u8f66\u4ff1\u4e50\u90e8",
"id": "750",
"riding_distance_total": "170,613",
"order_count": "134"
}, {
"aid": "176090",
"logos": "https:\/\/giant-images.oss-cn-shanghai.aliyuncs.com\/club\/club\/1609474912201145.jpg",
"name": "\u5510\u53bf\u6377\u5b89\u7279\u4ff1\u4e50\u90e8",
"id": "940",
"riding_distance_total": "168,632",
"order_count": "227"
}, {
"aid": "175980",
"logos": "https:\/\/giant-images.oss-cn-shanghai.aliyuncs.com\/club\/club\/16167268817033795.jpg",
"name": "\u6377\u5b89\u7279\u78c1\u53bf\u4e50\u9a91\u5355\u8f66\u4ff1\u4e50\u90e8",
"id": "971",
"riding_distance_total": "150,743",
"order_count": "65"
}, {
"aid": "176013",
"logos": "https:\/\/club-static.giant.com.cn\/index\/club\/img\/logo.png",
"name": "\u6377\u5b89\u7279\u5eca\u574a\u5efa\u56fd\u9053CYCLING WORLD",
"id": "799",
"riding_distance_total": "149,386",
"order_count": "207"
}, {
"aid": "176057",
"logos": "https:\/\/giant-images.oss-cn-shanghai.aliyuncs.com\/club\/club\/16042056799086036.jpg",
"name": "\u5bff\u5149\u4e1c\u57ce\u6377\u5b89\u7279\u4ff1\u4e50\u90e8",
"id": "812",
"riding_distance_total": "141,069",
"order_count": "127"
}]
}
原生html+css+js 分页配置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>无限滚动列表</title>
<style>
/* styles.css */
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
}
.scrollable {
width: 100%;
height: 300px;
/* 设置适当的高度 */
overflow-y: scroll;
border: 1px solid
}
.content {
padding: 20px;
border-bottom: 1px solid
}
</style>
</head>
<body>
<div id="scrollableDiv" class="scrollable">
<!-- 这里可以放很多内容来测试滚动 -->
<div class="content">Content 1</div>
<div class="content">Content 2</div>
<div class="content">Content 3</div>
<div class="content">Content 4</div>
<div class="content">Content 1</div>
<div class="content">Content 2</div>
<div class="content">Content 3</div>
<div class="content">Content 4</div>
<div class="content">Content 1</div>
<div class="content">Content 2</div>
<div class="content">Content 3</div>
<div class="content">Content 4</div>
<div class="content">Content 1</div>
<div class="content">Content 2</div>
<div class="content">Content 3</div>
<div class="content">Content 4</div>
<div class="content">Content 1</div>
<div class="content">Content 2</div>
<div class="content">Content 3</div>
<div class="content">Content 4</div>
<div class="content">Content 1</div>
<div class="content">Content 2</div>
<div class="content">Content 3</div>
<div class="content">Content 4</div>
<div class="content">Content 1</div>
<div class="content">Content 2</div>
<div class="content">Content 3</div>
<div class="content">Content 4</div>
<!-- 添加更多内容 -->
</div>
<script>
// scripts.js
document.addEventListener('DOMContentLoaded', function () {
const scrollableDiv = document.getElementById('scrollableDiv');
function isBottom(div) {
return div.scrollHeight - div.scrollTop === div.clientHeight;
}
function handleScroll() {
if (isBottom(scrollableDiv)) {
console.log('触底了');
// 在这里添加你希望触发的操作
}
}
scrollableDiv.addEventListener('scroll', handleScroll);
});
</script>
</body>
</html>
