慕慕手记项目日记 首页数据的渲染,使用js 2025-3-16

慕慕手记项目日记 首页数据的渲染,使用js 2025-3-16

到这部分我们先测试能不能使用js的方式来动态数据,先写出一个简短的demo出来

console.log("index.js文件引入了")var ClientHeight = document.documentElement.clientHeight; // 可视区域的高度,就是我们能看见的内容的高度
var sroTop = document.documentElement.scrollTop; // 滚动条在文档中的高度的位置(滚出可见区域的高度)
var srollHeight = document.body.scrollHeight; // 所有内容的高度var allowRequest = true; // 锁定后端数据请求中的状态。 是否允许请求后端function toNext()
{allowRequest = trueconsole.log("打开请求锁");
}
function windowScroll() {if (sroTop+ClientHeight >= srollHeight && allowRequest){  console.log("开始向后端请求数据,重新渲染页面");toNext()allowRequest = false;}
}window.addEventListener("scroll", windowScroll)

在浏览器中测试发现这个逻辑没有问题,稍后完善对于网页翻页值的初始化处理,其中起始页start_num为0,默认获取的最大页数为10页。现在来添加一下index.js的代码。

console.log("index.js文件引入了")var ClientHeight = document.documentElement.clientHeight; // 可视区域的高度,就是我们能看见的内容的高度
var allowRequest = true; // 锁定后端数据请求中的状态。 是否允许请求后端
var page = 1;
var endNum = 10; // 假设初始值为10,根据实际情况调整function getUrlParams() {var uri = location.search;var final_result = {};// 第一次请求没有参数的时候if (uri === "") {final_result['page'] = page;final_result['article_type'] = 'recommend';final_result['start_num'] = 0;final_result['end_num'] = 10;} else {if (uri.indexOf("?") != -1) {params = uri.substr(1);params_list = params.split("&");for (var i = 0; i < params_list.length; i++) {var key = params_list[i].split("=")[0]; // article_type=recommendvar value = params_list[i].split("=")[1]; // recommendfinal_result[key] = value;}}}return final_result;
}function toNextPage(params) {console.log(params);// 开始拼接urlvar url = "?";for (var key in params) {if (key === "page") {params[key] = parseInt(params[key]) + 1;}if (key === "start_num") {params[key] = endNum;}url += key;url += "=";url += params[key];url += "&";}// 去掉末尾的&符号if (url.endsWith("&")) {url = url.substr(0, url.length - 1);}// 滚动标识if (!url.includes("scroll")) {url += "scroll=1";}console.log(url);allowRequest = true;location.href = url;
}function windowScroll() {var scrollTop = document.documentElement.scrollTop; // 滚动条在文档中的高度的位置(滚出可见区域的高度)var scrollHeight = document.body.scrollHeight; // 所有内容的高度if (scrollTop + ClientHeight >= scrollHeight && allowRequest) {console.log("开始向后端请求数据,重新渲染页面");allowRequest = false;var params = getUrlParams();toNextPage(params);}
}window.addEventListener("scroll", windowScroll);

文章分类功能实现

现在文章需要按照类别进行分类,状态分为选择和未选择。同时需要修改前端模板

首先在index.py里面添加代码:

区分选择与未选择

label_types = {"recommend": {"name":"推荐","selected":"selected"},"auto_test": {"name": "自动化测试", "selected": "no-selected"},"python": {"name": "Python", "selected": "no-selected"},"java": {"name": "Java", "selected": "no-selected"},"function_test": {"name": "功能测试", "selected": "no-selected"},"pref_test": {"name": "性能测试", "selected": "no-selected"},"funny": {"name": "幽默段子", "selected": "no-selected"},
}

修改选择器

 左侧菜单栏的处理for k,v in label_types.items():if article_type == k:v["selected"] = "selected"else:v["selected"] = "no-selected"

然后修改index.html内的代码,里面的内容需要靠后端传过来才能进行使用。

<div class="article-container clearfix"><div class="left-menu fl">{% for label_name,label_value in label_types.items() %}<div class="{{label_value.selected}}"><a href="?article_type={{label_name}}&page=1">{{label_value.name}}</a></div>{% endfor %}</div>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/73933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

当前企业使用VPN面临的不足和挑战

VPN的防护理念无法满足数字化转型的需求 古人云&#xff1a;知己知彼&#xff0c;百战不殆&#xff0c;既然要替换VPN&#xff0c;就要先了解VPN。VPN于1996年起源&#xff0c;98年首次在我国出现&#xff0c;历经25年的持续演进&#xff0c;直到现在依然广泛流行。VPN的起源背…

python中ord()和chr()转化ASCII数值+解密字符串例题

1.ASCII码简介 ASCII 即美国信息交换标准代码&#xff08;American Standard Code for Information Interchange&#xff09;&#xff0c;是基于拉丁字母的一套电脑编码系统&#xff0c;主要用于显示现代英语和其他西欧语言。 发展历程&#xff1a;ASCII 码于 1963 年首次发布…

AMBA-CHI协议详解(二十五)

AMBA-CHI协议详解&#xff08;一&#xff09;- Introduction AMBA-CHI协议详解&#xff08;二&#xff09;- Channel fields / Read transactions AMBA-CHI协议详解&#xff08;三&#xff09;- Write transactions AMBA-CHI协议详解&#xff08;四&#xff09;- Other transac…

HTML 区块和布局

HTML 可以通过 <div> 和 <span>将元素组合起来。 HTML 区块元素 大多数 HTML 元素被定义为块级元素或内联元素。 块级元素在浏览器显示时&#xff0c;通常会以新行来开始&#xff08;和结束&#xff09;。 实例: <h1>, <p>, <ul>, <table&…

在 STM32F7 系列微控制器中,使用定时器(如 TIM10)实现 10ms 中断,并在中断服务函数中调用 ProRelay() 函数

在 STM32F7 系列微控制器中&#xff0c;使用定时器&#xff08;如 TIM10&#xff09;实现 10ms 中断&#xff0c;并在中断服务函数中调用 ProRelay() 函数&#xff0c;可以按照以下步骤实现&#xff1a; 1. 配置 TIM10 定时器 首先&#xff0c;需要配置 TIM10 定时器&#xff0…

Web 小项目: 网页版图书管理系统

目录 最终效果展示 代码 Gitee 地址 1. 引言 2. 留言板 [热身小练习] 2.1 准备工作 - 配置相关 2.2 创建留言表 2.3 创建 Java 类 2.4 定义 Mapper 接口 2.5 controller 2.6 service 3. 图书管理系统 3.1 准备工作 - 配置相关 3.2 创建数据库表 3.2.1 创建用户表…

Godot读取json配置文件

概述 在Godot 4.3中读取JSON配置文件&#xff0c;可以通过以下步骤实现&#xff1a; 步骤说明 读取文件内容&#xff1a;使用FileAccess类打开并读取JSON文件。 解析JSON数据&#xff1a;使用JSON类解析读取到的文本内容。 错误处理&#xff1a;处理文件不存在或JSON格式错…

RabbitMQ八股文

RabbitMQ 核心概念与组件 1. RabbitMQ 核心组件及其作用 1.1 生产者&#xff08;Producer&#xff09; 作用&#xff1a;创建并发送消息到交换机。特点&#xff1a;不直接将消息发送到队列&#xff0c;而是通过交换机路由。 1.2 交换机&#xff08;Exchange&#xff09; 作…

C语言每日一练——day_7

引言 针对初学者&#xff0c;每日练习几个题&#xff0c;快速上手C语言。第七天。&#xff08;连续更新中&#xff09; 采用在线OJ的形式 什么是在线OJ&#xff1f; 在线判题系统&#xff08;英语&#xff1a;Online Judge&#xff0c;缩写OJ&#xff09;是一种在编程竞赛中用…

C#原型模式:通过克隆对象来优化创建过程

在软件开发中&#xff0c;创建对象是非常常见的操作。然而&#xff0c;在某些情况下&#xff0c;构造对象的过程可能非常复杂或耗时&#xff0c;特别是当对象的创建涉及多个步骤或者需要初始化大量数据时。为了解决这个问题&#xff0c;**原型模式&#xff08;Prototype Patter…

ArcGIS10. 8简介与安装,附下载地址

目录 ArcGIS10.8 1. 概述 2. 组成与功能 3. 10.8 特性 下载链接 安装步骤 1. 安装准备 2. 具体步骤 3.补丁 其他版本安装 ArcGIS10.8 1. 概述 ArcGIS 10.8 是由美国 Esri 公司精心研发的一款功能强大的地理信息系统&#xff08;GIS&#xff09;平台。其核心功能在于…

Mac:JMeter 下载+安装+环境配置(图文详细讲解)

&#x1f4cc; 下载JMeter 下载地址&#xff1a;https://jmeter.apache.org/download_jmeter.cgi &#x1f4cc; 无需安装 Apache官网下载 JMeter 压缩包&#xff0c;无需安装&#xff0c;下载解压后放到自己指定目录下即可。 按我自己的习惯&#xff0c;我会在用户 jane 目…

【PCB工艺】基础:电子元器件

电子原理图&#xff08;Schematic Diagram&#xff09;是电路设计的基础&#xff0c;理解电子元器件和集成电路&#xff08;IC&#xff09;的作用&#xff0c;是画好原理图的关键。 本专栏将系统讲解 电子元器件分类、常见 IC、电路设计技巧&#xff0c;帮助你快速掌握电子电路…

nvm 安装某个node.js版本后不能使用或者报错,或不能使用npm的问题

安装了nvm之后发现不能使用某个版本的node.js&#xff0c;报错之后&#xff0c;不能使用npm这个命令。可以这样解决&#xff1a; 1、再node.js官网直接下载node.js 的压缩包。 找到nvm的安装目录 2、直接将文件夹解压到这个安装目录中修改一下名字即可。

【MySQL数据库】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法

在DQL的基础查询中&#xff0c;我们已经学过了多表查询的一种&#xff1a;联合查询&#xff08;union&#xff09;。本文我们将系统的讲解多表查询。 笛卡尔积现象 首先&#xff0c;我们想要查询emp表和stu表两个表&#xff0c;按照我们之前的知识栈&#xff0c;我们直接使用…

Java:Apache HttpClient中HttpRoute用法的介绍

当使用Apache HttpClient组件时&#xff0c;经常会用到它的连接池组件。典型的代码如下&#xff1a; PoolingHttpClientConnectionManager connectionManager new PoolingHttpClientConnectionManager();connectionManager.setMaxTotal(httpConfig.getMaxPoolTotal());connect…

RHCE(RHCSA复习:npm、dnf、源码安装实验)

七、软件管理 7.1 rpm 安装 7.1.1 挂载 [rootlocalhost ~]# ll /mnt total 0 drwxr-xr-x. 2 root root 6 Oct 27 21:32 hgfs[rootlocalhost ~]# mount /dev/sr0 /mnt #挂载 mount: /mnt: WARNING: source write-protected, mounted read-only. [rootlocalhost ~]# [rootlo…

分布式的消息流平台之Pulsar

Pulsar 流处理详解 Apache Pulsar 是一个分布式的消息流平台&#xff0c;集成了**消息队列&#xff08;MQ&#xff09;和流处理&#xff08;Stream Processing&#xff09;**能力。Pulsar 不仅提供低延迟、高吞吐的消息传输能力&#xff0c;还支持基于 Pulsar Functions、Flin…

【C++多线程】thread

C中的std::thread是C11引入的线程库的一部分&#xff0c;提供了创建和管理线程的能力。它封装了操作系统的线程接口&#xff0c;使得在C中更方便地进行多线程编程。 1. std::thread 的定义 std::thread 类位于<thread>头文件中&#xff0c;定义在std命名空间下&#xff…

【css酷炫效果】纯CSS实现故障文字特效

【css酷炫效果】纯CSS实现故障文字特效 缘创作背景html结构css样式完整代码基础版进阶版(3D效果) 效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90492053 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚…