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 類,用于添加分隔線效果。
    • 樣式中還包含了一些交互效果,如鏈接的鼠標懸停樣式。

三、結果展示

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/710718.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/710718.shtml
英文地址,請注明出處:http://en.pswp.cn/news/710718.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

根據A(String)字段去重,并且選擇B(Ingter)字段最大的值

數據格式&#xff1a; [SkillDTO(Job電線工, rankGrade高級工, r4), SkillDTO(Job監察員, rankGrade技師, r5), SkillDTO(Job監察員, rankGrade高級工, r4), SkillDTO(skillJob監察員, rankGrade中級工, r3)] List<SkillDTO> resultList SkillDTOList.stream().coll…

電子技術——PN結電流關系方程

電子技術——PN結電流關系方程 平衡狀態下的PN結 平衡狀態下的PN結界面總共有兩種電流&#xff0c;一種為 擴散電流 另一種為 漂移電流 。兩種電流形成的平衡區域稱為 耗散區 。 在平衡狀態擴散電流等于漂移電流&#xff0c;此時靜電流為0&#xff0c;PN結外部沒有電流&…

Java SPI:Service Provider Interface

SPI機制簡介 SPI&#xff08;Service Provider Interface&#xff09;&#xff0c;是從JDK6開始引入的&#xff0c;一種基于ClassLoader來發現并加載服務的機制。 一個標準的SPI&#xff0c;由3個組件構成&#xff0c;分別是&#xff1a; Service&#xff1a;是一個公開的接口…

Java ElasticSearch面試題

Java ElasticSearch面試題 前言1、ElasticSearch是什么&#xff1f;2. 說說你們公司ES的集群架構&#xff0c;索引數據大小&#xff0c;分片有多少 &#xff1f;3. ES的倒排索引是什么&#xff1f;4. ES是如何實現 master 選舉的?5. 描述一下 ES索引文檔的過程&#xff1a;6、…

Centos系統(Linux)掛載硬盤/數據盤詳細操作和開機自動掛載的兩種方式

前提&#xff1a;已經做好磁盤陣列&#xff0c;將磁盤劃分好 磁盤初始化操作步驟&#xff08;如果已經可以正常掛載可跳過)&#xff1a; 使用fdisk -l命令查看多出來的大容量的磁盤名稱&#xff08;如果多塊磁盤&#xff0c;查看需要掛載的磁盤名稱&#xff09;&#xff0c;一…

embedding的原理和結構

embedding(向量化)是一個將數據轉化為向量矩陣的過程&#xff0c;作用是&#xff1a;將高維稀疏向量轉化為稠密向量&#xff0c;從而方便下游模型處理 簡單的概念大家應該都知道了&#xff0c;以LLM為例 輸入&#xff1a;文字 模型&#xff1a;embedding 輸出&#xff1a;向量…

c++高精度乘法的原理及c++代碼講解

高精度乘法的原理主要是利用數學中乘法的基本原理&#xff0c;將大整數拆分成各個位數的相乘&#xff0c;然后累加得到最終結果。其過程如下&#xff1a; 將兩個大整數相乘&#xff0c;從低位開始逐位相乘&#xff0c;得到部分乘積&#xff1b;將每一位的部分乘積相加&#xf…

【Emgu CV教程】7.8、圖像銳化(增強)之同態濾波

文章目錄 一、同態濾波大體原理二、代碼三、效果舉例 一、同態濾波大體原理 之前介紹的幾個銳化、增強方法&#xff0c;包括更早之前介紹的圖像模糊方法&#xff0c;都是基于空間域進行處理&#xff0c;也就是直接對目標點周邊像素值進行各種數學運算。而這篇文章提到的同態濾…

學習計算機的好處

之前寫了那么多計算機知識&#xff0c;卻沒有一篇寫我學計算機的初衷。 掌握計算機技術不僅可以提高我們的就業能力和競爭力&#xff0c;同時有助于我們更好地認識世界&#xff0c;提高工作效率和解決問題的能力&#xff0c;更好地利用科技創造更美好的未來。 因此&#xff0c…

pyvisa庫實現儀器控制

python控制儀器實現自動化常用pyvisa庫&#xff0c;基本控制可大致分為創建儀器控制對象、寫入控制指令、讀取儀表信息和查詢儀表狀態&#xff0c;下面進行基本的講解。 pyvisa庫創建儀表控制對象 import tkinter.messagebox import pyvisaclass InstrumentControl:inst Non…

喜迎喬遷,開啟新章 ▏易我科技新辦公區喬遷慶典隆重舉行

2024年1月18日&#xff0c;易我科技新辦公區喬遷慶典在熱烈而喜慶的氛圍中隆重舉行。新辦公區的投入使用&#xff0c;標志著易我科技將以嶄新姿態邁向新的發展階段。 ▲ 易我科技新辦公區 隨著公司業務的不斷發展和壯大&#xff0c;為了更好地適應公司發展的需要&#xff0c;…

2024-02-29(Flink)

1.Flink原理&#xff08;角色分工&#xff09; 2.Flink執行流程 on yarn版&#xff1a; 3.相關概念 1&#xff09;DataFlow&#xff1a;Flink程序在執行的時候會被映射成一個數據流模型&#xff1b; 2&#xff09;Operator&#xff1a;數據流模型中的每一個操作被稱作Operat…

Spring Boot 高級實踐探索:深度解讀與實戰演練

隨著開發者對Spring Boot框架的基礎運用日漸嫻熟&#xff0c;邁向更深層次的技術探究和應用場景拓展顯得尤為重要。本文將帶領讀者深入研究Spring Boot的若干核心進階特性&#xff0c;并結合實際項目案例&#xff0c;涵蓋自動化測試策略的深化應用、高級配置管理機制的巧妙運用…

Redis 之四:Redis 事務和樂觀鎖

事務特點 Redis 事務可以一次執行多個命令&#xff0c; 并且帶有以下三個重要的保證&#xff1a; 批量操作在發送 EXEC 命令前被放入隊列緩存。 收到 EXEC 命令后進入事務執行&#xff0c;事務中任意命令執行失敗&#xff0c;其余的命令依然被執行。不具備原子性。 在事務執…

通訊錄——C語言實現

頭文件Contact.h #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h> #pragma once #define MAX 100 #define MAX_NAME 20 #define MAX_SEX 5 #define MAX_TELE 12 #define MAX_ADDR 30//表示一個人的信息 //struct…

npm使用國內淘寶鏡像的方法整理

命令配置安裝&#xff1a; 淘寶鏡像&#xff1a; npm config set registry https://registry.npm.taobao.org/ 官方鏡像&#xff1a; npm config set registry https://registry.npmjs.org 通過cnpm安裝&#xff1a; npm install -g cnpm --registryhttps://registry.npm.…

PTA L2-003 月餅 (附坑點說明)

月餅是中國人在中秋佳節時吃的一種傳統食品&#xff0c;不同地區有許多不同風味的月餅。現給定所有種類月餅的庫存量、總售價、以及市場的最大需求量&#xff0c;請你計算可以獲得的最大收益是多少。 注意&#xff1a;銷售時允許取出一部分庫存。樣例給出的情形是這樣的&#…

如何在Java中反轉字符串?

目錄 1. 使用StringBuilder的reverse方法&#xff1a; 2. 使用for循環和字符數組&#xff1a; 3. 使用遞歸&#xff1a; 4. 使用Java 8的Stream API&#xff1a; More Java中&#xff0c;反轉字符串可以通過多種方式實現。以下是一些常見的方法&#xff1a; 1. Java中使用…

【Python】PyGameUI控件

哈里前段時間寫了一個windows平板上自娛自樂&#xff08;春節和家人一起玩&#xff09;基于pygame的大富翁游戲。 pygame沒有按鈕之類的UI控件&#xff0c;寫起來不怎么順手。就自己寫一個簡單的框架。 倉庫地址 哈里PygameUi: pygame ui封裝自用 (gitee.com) 使用示例 示…

上海亞商投顧:滬指終結月線6連陰 北向資金凈買入超160億

上海亞商投顧前言&#xff1a;無懼大盤漲跌&#xff0c;解密龍虎榜資金&#xff0c;跟蹤一線游資和機構資金動向&#xff0c;識別短期熱點和強勢個股。 一.市場情緒 三大指數昨日低開高走&#xff0c;滬指重新站上3000點&#xff0c;深成指、創業板指大漲超3%。半導體產業鏈全…