news 2026/4/18 9:55:47

评价展示页面源代码,专注于展示商品的好评内容,并支持带图片和视频的评价展示,同时实现无限滚动加载功能。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
评价展示页面源代码,专注于展示商品的好评内容,并支持带图片和视频的评价展示,同时实现无限滚动加载功能。

专注于展示XX商品的好评内容,并支持带图片和视频的评价展示,同时实现无限滚动加载功能。

以下是实现方案:

关键功能说明:

  1. 好评筛选:只展示4星及以上的好评内容

  2. 媒体内容展示:支持图片和视频内容的展示,视频会有特殊标识

  3. 无限滚动加载:当用户滚动到页面底部时自动加载更多评价

  4. 初始加载30条:页面加载时首先显示30条评价

  5. 响应式设计:媒体内容采用网格布局,适应不同屏幕尺寸

  6. 加载状态提示:显示加载中和没有更多内容的提示

实际应用中,您需要:

  1. 替换模拟数据生成函数,改为从您的后端API获取真实数据

  2. 根据实际需求调整媒体内容的展示方式

  3. 可能需要添加图片预览和视频播放功能

  4. 考虑添加评价筛选和排序功能

这个实现保持了与XX平台详情页类似的用户体验,同时专注于展示高质量的好评内容。

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>产品好评展示</title> <style> :root { --primary-color: #e93b3d; --secondary-color: #f5f5f5; } body { margin: 0; padding: 0; font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif; background-color: #f9f9f9; } .review-container { max-width: 800px; margin: 0 auto; padding: 20px; } .header { text-align: center; margin-bottom: 20px; } .header h1 { color: var(--primary-color); margin-bottom: 10px; } .disclaimer { background-color: var(--secondary-color); padding: 15px; border-radius: 8px; margin-bottom: 25px; font-size: 14px; color: #666; line-height: 1.6; } .disclaimer a { color: var(--primary-color); text-decoration: none; } .disclaimer a:hover { text-decoration: underline; } .review-item { background-color: white; border-radius: 8px; padding: 20px; margin-bottom: 20px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05); } .review-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } .user-info { display: flex; align-items: center; } .user-avatar { width: 40px; height: 40px; border-radius: 50%; background-color: #f0f0f0; margin-right: 10px; display: flex; align-items: center; justify-content: center; color: var(--primary-color); font-weight: bold; } .user-name { font-weight: bold; color: #333; } .rating { color: #ff9900; font-size: 16px; } .review-time { color: #999; font-size: 12px; } .review-content { margin: 15px 0; line-height: 1.6; color: #333; } .media-container { margin-top: 15px; } .media-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 10px; margin-top: 10px; } .media-item { position: relative; border-radius: 4px; overflow: hidden; cursor: pointer; } .media-item img { width: 100%; height: 120px; object-fit: cover; transition: transform 0.3s; } .media-item:hover img { transform: scale(1.03); } .video-icon { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 40px; height: 40px; background-color: rgba(0, 0, 0, 0.6); border-radius: 50%; display: flex; align-items: center; justify-content: center; } .video-icon::after { content: ""; display: block; width: 0; height: 0; border-top: 10px solid transparent; border-bottom: 10px solid transparent; border-left: 15px solid white; margin-left: 3px; } .loading { text-align: center; padding: 20px; color: #999; display: none; } .no-more { text-align: center; padding: 20px; color: #999; display: none; } </style> </head> <body> <div class="review-container"> <div class="header"> <h1>用户好评展示</h1> </div> <div class="disclaimer"> <p>以下评价内容来自云惠商城用户,均为4星及以上好评且包含图片或视频内容。查看原始评价请访问: <a href="https://mry.52yunhui.cn/shangpin.html" target="_blank">云惠商品页面</a> </p> </div> <div id="reviews-list"></div> <div id="loading" class="loading">正在加载更多评价...</div> <div id="no-more" class="no-more"> <a href="https://mry.52yunhui.cn/shangpin.html" target="_blank">查看更多评价和购买请前往XX平台</a> </div> </div> <script> // 模拟数据 - 实际应用中应从后端API获取 const generateMockReviews = (count) => { const mockReviews = []; const nicknames = ["云惠用户", "优质买家", "老顾客", "匿名用户", "VIP会员"]; const contents = [ "产品质量非常好,已经多次购买了!", "包装精美,使用效果超出预期,强烈推荐!", "物流很快,客服态度也很好,产品做工精细!", "比实体店便宜很多,质量却一点不差,非常满意!", "家人很喜欢,下次还会再来购买!" ]; for (let i = 0; i < count; i++) { const hasMedia = Math.random() > 0.3; // 70%概率带媒体内容 const mediaCount = hasMedia ? Math.floor(Math.random() * 5) + 1 : 0; const hasVideo = hasMedia && Math.random() > 0.7; // 30%概率有视频 const media = []; if (hasMedia) { for (let j = 0; j < mediaCount; j++) { const isVideo = hasVideo && j === 0; // 第一个可能是视频 media.push({ type: isVideo ? 'video' : 'image', url: isVideo ? 'https://example.com/video-thumbnail.jpg' : `https://picsum.photos/300/200?random=${i}${j}` }); } } mockReviews.push({ nickname: nicknames[Math.floor(Math.random() * nicknames.length)], score: Math.floor(Math.random() * 2) + 4, // 4-5星 content: contents[Math.floor(Math.random() * contents.length)], creationTime: `2023-${Math.floor(Math.random() * 12) + 1}-${Math.floor(Math.random() * 28) + 1} ${Math.floor(Math.random() * 24)}:${Math.floor(Math.random() * 60)}`, media: media }); } return mockReviews; }; // 初始加载30条评价 let allReviews = generateMockReviews(100); // 模拟总共100条评价 let displayedReviews = 0; const reviewsPerLoad = 30; // 过滤出好评(4星及以上)且带媒体内容的评价 const filteredReviews = allReviews.filter(review => review.score >= 4 && review.media.length > 0 ); function renderReview(review) { const container = document.getElementById('reviews-list'); const reviewElement = document.createElement('div'); reviewElement.className = 'review-item'; // 用户头像使用昵称首字母 const avatarText = review.nickname.charAt(0); // 构建媒体内容HTML let mediaHTML = ''; if (review.media && review.media.length > 0) { mediaHTML = '<div class="media-container"><div class="media-grid">'; review.media.forEach((item, index) => { if (item.type === 'video') { mediaHTML += ` <div class="media-item"> <img src="${item.url}" alt="视频封面"> <div class="video-icon"></div> </div> `; } else { mediaHTML += ` <div class="media-item"> <img src="${item.url}" alt="评价图片"> </div> `; } }); mediaHTML += '</div></div>'; } reviewElement.innerHTML = ` <div class="review-header"> <div class="user-info"> <div class="user-avatar">${avatarText}</div> <div> <div class="user-name">${review.nickname}</div> <div class="rating">${'★'.repeat(review.score)}${'☆'.repeat(5 - review.score)}</div> </div> </div> <div class="review-time">${review.creationTime}</div> </div> <div class="review-content">${review.content}</div> ${mediaHTML} `; container.appendChild(reviewElement); } function loadMoreReviews() { const loadingElement = document.getElementById('loading'); const noMoreElement = document.getElementById('no-more'); loadingElement.style.display = 'block'; // 模拟网络请求延迟 setTimeout(() => { const remainingReviews = filteredReviews.length - displayedReviews; const loadCount = Math.min(reviewsPerLoad, remainingReviews); for (let i = 0; i < loadCount; i++) { if (displayedReviews < filteredReviews.length) { renderReview(filteredReviews[displayedReviews]); displayedReviews++; } } loadingElement.style.display = 'none'; if (displayedReviews >= filteredReviews.length) { noMoreElement.style.display = 'block'; } }, 800); } // 初始加载 document.addEventListener('DOMContentLoaded', () => { loadMoreReviews(); }); // 无限滚动加载 window.addEventListener('scroll', () => { const { scrollTop, scrollHeight, clientHeight } = document.documentElement; const loadingElement = document.getElementById('loading'); const noMoreElement = document.getElementById('no-more'); if (scrollTop + clientHeight >= scrollHeight - 100 && loadingElement.style.display === 'none' && noMoreElement.style.display !== 'block') { loadMoreReviews(); } }); </script> </body> </html>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 12:15:44

V-HACD:3D模型优化的智能分割解决方案

V-HACD&#xff1a;3D模型优化的智能分割解决方案 【免费下载链接】v-hacd Automatically exported from code.google.com/p/v-hacd 项目地址: https://gitcode.com/gh_mirrors/vh/v-hacd 在3D游戏开发和虚拟现实应用中&#xff0c;你是否遇到过这样的困境&#xff1a;复…

作者头像 李华
网站建设 2026/4/18 10:34:51

React Native鸿蒙化性能优化终极指南:从基础到高阶的完整方案

React Native鸿蒙化性能优化终极指南&#xff1a;从基础到高阶的完整方案 【免费下载链接】ohos_react_native React Native鸿蒙化仓库 项目地址: https://gitcode.com/openharmony-sig/ohos_react_native 在React Native鸿蒙化开发过程中&#xff0c;性能优化是确保应用…

作者头像 李华
网站建设 2026/4/18 10:18:09

26、编程中的实用类与功能解析

编程中的实用类与功能解析 在编程领域,尤其是开发复杂系统时,应用间的通信便利性、命令行参数处理的标准化以及程序实例的唯一性控制等都至关重要。同时,一些通用的实用类能极大简化字符串操作、文件读写和时间处理等任务。下面将深入探讨这些方面的知识。 1. 命令行参数处…

作者头像 李华
网站建设 2026/4/17 16:43:35

为什么Hetty的深色模式能让安全测试效率翻倍?

Hetty作为一款专为安全研究设计的HTTP工具包&#xff0c;其内置的深色模式不仅是一个视觉选择&#xff0c;更是提升工作效率的关键因素。在长时间进行渗透测试和HTTP安全分析时&#xff0c;合理的界面设计能够显著降低视觉疲劳&#xff0c;让安全专家保持最佳工作状态。 【免费…

作者头像 李华
网站建设 2026/4/18 9:38:04

32、Qt 小部件的使用与示例

Qt 小部件的使用与示例 1. QMessageBox QMessageBox 可通过静态方法弹出预配置的消息框。以下是一个使用 QMessageBox::information 方法弹出带有信息图标的消息框示例: /* showmessgebox.cpp */ #include <qapplication.h> #include <qmessagebox.h> int m…

作者头像 李华
网站建设 2026/4/18 11:17:05

YOLOv5安全帽识别系统:构建智能工业安全防线的完整指南

YOLOv5安全帽识别系统&#xff1a;构建智能工业安全防线的完整指南 【免费下载链接】Yolov5-安全帽识别 基于Yolov5网络模型的现场作业安全帽是否正确佩戴监测 项目地址: https://ai.gitcode.com/Qimat/model 在工业4.0时代&#xff0c;安全生产管理正经历着从传统人工监…

作者头像 李华