当前位置: 首页 > news >正文

VUE3自定义文章排行榜的简单界面

文章目录

  • 一、代码展示
  • 二、代码解读
  • 三、结果展示

一、代码展示

<template><div class="article-ranking"><div class="header"><h2 class="title">{{ title }}</h2></div><div class="ranking-list"><div v-for="(article, index) in articles" :key="index" class="article-item"><div class="article-info"><h3 class="article-title">{{ truncateTitle(article.title, 25) }}</h3><p class="article-content">{{ truncateContent(article.summary, 50) }}</p><div class="details"><div class="info-row"><p class="info-text">时间: <span class="time">{{ formatPublishTime(article.createTime) }}</span> &nbsp;|&nbsp;浏览量: <span class="count">{{ formatViews(article.likeCount).formattedValue }}</span>
<!--               --></p></div></div></div><div class="divider"></div> <!-- 分隔线 --></div></div><div class="footer"><a @click="viewFullRanking" href="#" class="full-ranking-link">查看完整榜单</a></div></div>
</template><script setup>
import { defineProps } from 'vue';const props = defineProps(['title', 'articles']);const viewFullRanking = () => {console.log('View Full Ranking');
};const truncateContent = (content, maxLength) => {return content.length > maxLength ? content.substring(0, maxLength) + '...' : content;
};const truncateTitle = (title, maxLength) => {return title.length > maxLength ? title.substring(0, maxLength) + '...' : title;
};const formatPublishTime = (publishTime) => {const currentDate = new Date();const articleDate = new Date(publishTime);const timeDiff = currentDate - articleDate;const oneDay = 24 * 60 * 60 * 1000;const oneMonth = oneDay * 30;if (timeDiff < oneDay) {const hours = Math.floor(timeDiff / (60 * 60 * 1000));return `${hours}小时前`;} else if (timeDiff < oneMonth) {const days = Math.floor(timeDiff / oneDay);return `${days}天前`;} else {const months = Math.floor(timeDiff / oneMonth);return `${months}个月前`;}
};const formatAbbreviation = (value) => {if (value >= 10000) {return {formattedValue: Math.floor(value / 1000) + 'w+',isLargeCount: true,};} else {return {formattedValue: value,isLargeCount: false,};}
};const formatViews = (views) => formatAbbreviation(views);const formatLikes = (likes) => formatAbbreviation(likes);
</script><style scoped>
.article-ranking {width: 300px;border: 1px solid #ccc;border-radius: 8px;padding: 16px;margin: 16px;font-family: 'Arial', sans-serif;
}.article-title {font-size: 18px;margin-bottom: 8px;color: #333;text-align: left;  /* Align article title to the left */
}.article-content {font-size: 14px;color: #777;margin-bottom: 8px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;text-align: left;  /* Align article content to the left */
}.ranking-list {display: flex;flex-direction: column;
}.article-item {padding: 8px;
}.article-info {display: flex;flex-direction: column;
}.details {flex-grow: 1;
}.info-row {display: flex;flex-wrap: wrap;justify-content: space-between;
}.time {font-weight: bold;color: #1890ff;
}.count {font-weight: bold;color: #1890ff;
}.large-count {font-size: 12px; /* 调整较大计数的字体大小 */
}.divider {height: 1px;background-color: #ddd;margin: 8px 0;
}.footer {text-align: center;margin-top: 16px;
}.full-ranking-link {font-size: 14px;color: #1890ff;text-decoration: none;
}.full-ranking-link:hover {text-decoration: underline;
}
</style>

二、代码解读

  1. <template> 部分:

    • 整个模板包含一个名为 “article-ranking” 的 div,宽度为300像素,具有圆角边框和一些内外边距,呈现为一个简单的排行榜容器。
    • 模板包含标题(“header”)、排行列表(“ranking-list”)、文章项(“article-item”)、文章信息(“article-info”)、详细信息(“details”)、分隔线(“divider”)和页脚(“footer”)。
  2. <script setup> 部分:

    • 使用 import { defineProps } from 'vue'; 导入 defineProps 方法,以定义组件的属性。
    • 使用 defineProps(['title', 'articles']); 定义了两个属性:titlearticles
    • 定义了一个 viewFullRanking 方法,用于在点击 “查看完整榜单” 链接时输出一条日志。
    • 定义了 truncateContenttruncateTitle 方法,用于截断文章内容和标题,以确保它们不会超过指定的长度。
    • 定义了 formatPublishTime 方法,用于根据发布时间计算并返回相对于当前时间的时间差,以便显示多久前发布的文章。
    • 定义了 formatAbbreviation 方法,用于根据数值的大小返回格式化后的数值,并标记是否为较大的计数。
    • 定义了 formatViewsformatLikes 方法,这两个方法分别使用 formatAbbreviation 处理浏览量和点赞数。
  3. <style scoped> 部分:

    • 对排行榜容器及其子元素进行样式定义。
    • 调整了标题和文章内容的样式,使其居左对齐。
    • 使用了 flex 布局来组织文章项和详细信息。
    • 设置了一些通用的样式,如字体大小、颜色、边框等。
    • 使用了一些特定样式,如 divider 类,用于添加分隔线效果。
    • 样式中还包含了一些交互效果,如链接的鼠标悬停样式。

三、结果展示

在这里插入图片描述

相关文章:

VUE3自定义文章排行榜的简单界面

文章目录 一、代码展示二、代码解读三、结果展示 一、代码展示 <template><div class"article-ranking"><div class"header"><h2 class"title">{{ title }}</h2></div><div class"ranking-list&qu…...

七通道NPN 达林顿管GC2003,专为符合标准 TTL 而制造,最高工作电压 50V,耐压 80V

GC2003 内部集成了 7 个 NPN 达林顿晶体管&#xff0c;连接的阵列&#xff0c;非常适合逻辑接口电平数字电路&#xff08;例 如 TTL&#xff0c;CMOS 或PMOS 上/NMOS&#xff09;和较高的电流/电压&#xff0c;如电灯电磁阀&#xff0c;继电器&#xff0c;打印机或其他类似的负…...

若依springboot接入feign踩坑记录

问题情境&#xff1a; 简单的项目采用了若依的前后端分离版本单体应用&#xff0c;之前采用forest请求调用第三方接口&#xff0c;改为feign接口调用后&#xff0c;引入feign报错 error creating bean with name ‘configurationPropertiesbean’ 解决方案&#xff1a; spri…...

Lumerical Script ------ Error: <文件目录> line x:syntax error

Lumerical Script ------ Error: <文件目录> line x:syntax error 引言正文引言 在 Lumerical Script ------ Error: line 0: syntax error 一文中我们介绍了一种常见的错误提示信息。这里,我们使用类似的代码,介绍另一种提示错误提示信息。 正文 有时候,当我们在…...

Opencv基础与学习路线

Opencv Opencv每一篇目具体&#xff1a; Opencv(1)读取与图像操作 Opencv(2)绘图与图像操作 Opencv(3)详解霍夫变换 Opencv(4)详解轮廓 Opencv(5)平滑处理 具体Opencv相关demo代码欢迎访问我的github仓库&#xff08;包含python和c代码&#xff09; demo代码 文章目录 Opencv一…...

Python装饰器的使用详解

目录 1、函数装饰器 1.1、闭包函数 1.2、装饰器语法 1.3、装饰带参数的函数 1.4、被装饰函数的身份问题 1.4.1、解决被装饰函数的身份问题 1.5、装饰器本身携带/传参数 1.6、嵌套多个装饰器 2、类装饰器 装饰器顾名思义作为一个装饰的作用&#xff0c;本身不改变被装…...

基于springboot+vue的党员教育和管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…...

三个伪类让你的CSS代码更加优雅

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ 原文&#xff1a;CSS整洁之道——:is()、:where()和:has()的用法 - 掘金 (juejin.cn) 让我们写出优雅界面的CSS&#xff0c;它也总是把自己进化得更加优雅。 今天我们花5分钟时间学习三个优雅的CSS伪类&#xff1a…...

幻兽帕鲁联机服务器搭建

幻兽帕鲁联机服务器搭建 开通云服务器 云主机购买|香港云服务器|香港云主机|美国云服务器|弹性云主机租用尽在-特网科技 建议选择4核心 16G内存 10M带宽&#xff0c;可满足6-15人游玩 下载安装脚本 windows系统: 下载 http://downinfo.myhostadmin.net/palserver/install…...

京东商品优惠券API获取商品到手价

item_get_app-获得JD商品详情原数据 公共参数 请求地址: jd/item_get_app 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,i…...

Flutter Version Manager (FVM): Flutter的版本管理终极指南

Flutter笔记 Flutter Version Manager (FVM) - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/136300307 my-websit…...

Docker技术概论(3):Docker 中的基本概念

Docker技术概论&#xff08;3&#xff09; Docker 中的基本概念 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://…...

死记硬背spring bean 的生命周期

1.bean的生命周期 我们平常经常使用类似于new Object()的方式去创建对象&#xff0c;在这个对象没有任何引用的时候&#xff0c;会被gc给回收掉。而对于spring而言&#xff0c;它本身存在一个Ioc容器&#xff0c;就是用来管理对象的&#xff0c;而对象的生命周期也完全由这个容…...

海外网红营销策略:如何将红人粉丝有效转化为品牌忠实粉丝?

在数字化时代&#xff0c;社交媒体已经成为品牌推广和营销的不可或缺的一部分。随着海外网红营销的崛起&#xff0c;品牌们纷纷将目光投向这个新兴的营销领域。然而&#xff0c;仅仅依赖网红的影响力来达到品牌传播的效果是不够的&#xff0c;更为重要的是如何将网红的粉丝转化…...

java之Bean对象

1. 什么是Bean&#xff1f; Bean被实例化的&#xff0c;是被Spring框架所管理的Java对象。 Spring容器会自动完成Bean的实例化。将所创建的的Bean自动注入到Ioc容器中以供调用。 spring框架中 IOC容器中管理的对象就是Bean对象 2. 第三方bean Bean 因为第三方bean&#xff0…...

Flink——芒果TV的实时数仓建设实践

目录 一、芒果TV实时数仓建设历程 1.1 阶段一&#xff1a;Storm/Flink JavaSpark SQL 1.2 阶段二&#xff1a;Flink SQLSpark SQL 1.3 阶段三&#xff1a;Flink SQLStarRocks 二、自研Flink实时计算调度平台介绍 2.1 现有痛点 2.2 平台架构设计 三、Flink SQL实时数仓分…...

卸载云服务器上的 MySQL 数据库

执行以下命令以停止 MySQL 服务&#xff1a; sudo service mysql stop执行以下命令以彻底卸载 MySQL&#xff1a; sudo apt-get remove --purge mysql-server mysql-client mysql-common sudo apt-get autoremove sudo apt-get autoclean 这将删除 MySQL 数据库服务器、客…...

AUTOSAR SPI详解

1.SPI通信 1&#xff09;SPI通信脚 SCLO&#xff1a;串行时钟sclk。MTSR&#xff1a;主向从方向数据MTSR(主发送从接收)。MRST&#xff1a;从向主方向数据MRST(主接收从发送)。SLSO&#xff1a;从选择信号SLS&#xff0c;支持16路片选控制。 2) SPI状态机 2.SPI通信波形 在主…...

SpringBoot快速入门(黑马学习笔记)

需求 需求&#xff1a;基于SpringBoot的方式开发一个Web应用&#xff0c;浏览器发起请求/hello后&#xff0c;给浏览器返回字符串"Hello World~"。 开发步骤 第一步&#xff1a;创建SpringBoot工程项目 第二步&#xff1a;定义HelloController类&#xff0c;添加方…...

压力测试工具Jmeter的下载与使用

1、进入官网下载Jmeter https://jmeter.apache.org/ 国内镜像&#xff08;下载的慢的话可以用国内镜像下载&#xff09; https://mirrors.cloud.tencent.com/apache/jmeter/binaries/ 2、跳转到下载页面 3、根据不同系统下载相应版本的Jmeter压缩包&#xff0c;Linux系统下载…...

**发散创新:用Python实现基于规则的动态权限控制系统**在现代软件系统中,权限管理早已不是简单的“用户

发散创新&#xff1a;用Python实现基于规则的动态权限控制系统 在现代软件系统中&#xff0c;权限管理早已不是简单的“用户-角色-资源”映射问题。随着微服务架构和云原生的发展&#xff0c;传统静态权限模型越来越难以满足灵活、可扩展的需求。本文将带你深入一个创意编码实践…...

避坑指南:Gromacs模拟后处理之轨迹矫正、自由能计算与高清渲染实战

Gromacs后处理实战&#xff1a;从轨迹矫正到高清渲染的进阶技巧 在分子动力学模拟的世界里&#xff0c;跑完模拟只是万里长征的第一步。真正考验研究者功力的&#xff0c;往往在于如何从海量数据中提取有价值的信息&#xff0c;并将其转化为直观、专业的可视化结果。本文将聚焦…...

大模型API限流设计实战指南(QPS突增200%仍稳如磐石:基于请求语义+Token消耗双维度限流)

第一章&#xff1a;生成式AI应用限流熔断机制 2026奇点智能技术大会(https://ml-summit.org) 在高并发场景下&#xff0c;生成式AI服务&#xff08;如大语言模型API&#xff09;极易因突发流量、长尾请求或模型推理异常导致资源耗尽、响应延迟激增甚至级联故障。限流与熔断作为…...

3个步骤掌握Windows任务栏美化神器TranslucentTB

3个步骤掌握Windows任务栏美化神器TranslucentTB 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 想要让Windows任务栏焕然一新&#xff0…...

Win10系统下SQL Server 2005安装避坑指南:从环境配置到成功连接全流程解析

1. 环境准备&#xff1a;避开Win10与SQL Server 2005的兼容性雷区 在Windows 10上安装SQL Server 2005就像让老式收音机接收数字信号——需要特殊的适配器。我经历过6次安装失败后终于发现&#xff0c;IIS功能组件和系统兼容性设置是两大关键。首先打开控制面板的"启用或关…...

PASCAL VOC2012数据集实战指南:从下载到目标检测应用

1. PASCAL VOC2012数据集简介 PASCAL VOC2012是计算机视觉领域最经典的基准数据集之一&#xff0c;最初用于PASCAL VOC挑战赛。这个数据集包含了20个常见物体类别&#xff0c;涵盖人、动物、交通工具和室内物品四大类。每张图片都经过精细标注&#xff0c;包含物体边界框、类别…...

STM32H7实战:用FMC+DMA双缓冲高效驱动AD7606的5个关键步骤

STM32H7实战&#xff1a;用FMCDMA双缓冲高效驱动AD7606的5个关键步骤 在工业自动化、电力监测等高精度数据采集场景中&#xff0c;AD7606凭借其8通道同步采样、16位分辨率和200kSPS采样率成为热门选择。但许多开发者在使用STM32H7驱动时&#xff0c;常遇到数据丢失、时序抖动或…...

DownKyi视频下载工具:从网络限制到自由收藏的完整解决方案

DownKyi视频下载工具&#xff1a;从网络限制到自由收藏的完整解决方案 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&a…...

FogGate-YOLO:直击雾天检测痛点,基于通道选择的 YOLOv8 优化方案

点击蓝字关注我们关注并星标从此不迷路计算机视觉研究院公众号ID&#xff5c;计算机视觉研究院学习群&#xff5c;扫码在主页获取加入方式https://pmc.ncbi.nlm.nih.gov/articles/PMC13030070/pdf/sensors-26-01811.pdf计算机视觉研究院专栏Column of Computer Vision Institut…...

3分钟搞定PotPlayer字幕翻译:百度翻译插件免费配置全攻略

3分钟搞定PotPlayer字幕翻译&#xff1a;百度翻译插件免费配置全攻略 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 还在为外语视频的…...