NodeJS博客实战25_前台博客评论分页展示

ゞ 浴缸里的玫瑰 2022-05-27 08:42 271阅读 0赞

源码地址:https://github.com/RidingACodeToStray/Nodejs_blog

1.主要功能

1)每次打开文章加载评论

2)若该文章没有评论则展示没有评论的信息

3)对于上一页和下一页点击使用ajax的方式进行请求,没有上一页和没有下一页做处理

4)分页中相关参数的计算等

2.主要代码:

1)public/js/comment.js

  1. var perpage = 2;
  2. var page = 1;
  3. var pages = 0;
  4. var comments = [];
  5. $('.commentBtn').on('click', function() {
  6. $.ajax({
  7. type: 'post',
  8. url: '/api/comment/post',
  9. data: {
  10. contentid: $('#contentId').val(),
  11. content: $('.neirong').val()
  12. },
  13. success: function(res) {
  14. // console.log(res);
  15. $('.neirong').val(''); //清空评论区
  16. comments = res.data.comments.reverse();
  17. renderComment();
  18. }
  19. })
  20. })
  21. //每次页面加载获取该文章的所有评论
  22. $.ajax({
  23. type: 'get',
  24. url: '/api/comment',
  25. data: {
  26. contentid: $('#contentId').val()
  27. },
  28. success: function(res) {
  29. comments = res.data.reverse();
  30. renderComment();
  31. }
  32. })
  33. //分页处理
  34. $('.a-page').delegate('a','click',function(){
  35. if($(this).parent().hasClass('pre')){
  36. page --;
  37. }else{
  38. page ++;
  39. }
  40. renderComment();
  41. })
  42. //提交评论
  43. function renderComment() {
  44. $('.pinglunshu').html(comments.length);
  45. pages = Math.ceil(comments.length / perpage,1);
  46. var start = Math.max(0,(page-1) * perpage); //起始页
  47. var end = Math.min(start + perpage,comments.length); //终止页
  48. var spans = $('.a-page > span');
  49. spans.eq(1).html( page + '/' + pages);
  50. //没有上一页判断
  51. if(page <= 1){
  52. page = 1;
  53. spans.eq(0).html('<span>没有上一页了</span>');
  54. }else{
  55. spans.eq(0).html('<a href="javascript:void(0)">上一页</a>');
  56. }
  57. //没有下一页判断
  58. if(page >= pages){
  59. page = pages;
  60. spans.eq(2).html('<span>没有下一页了</span>');
  61. }else{
  62. spans.eq(2).html('<a href="javascript:void(0)">下一页</a>');
  63. }
  64. if(comments.length == 0){
  65. $('.megList').html('<li style="text-align:left;">还没有评论</li>');
  66. }else{
  67. var html = '';
  68. for (var i = start; i < end; i++) {
  69. html += '<li style="padding: 10px;border: 1px solid;margin-bottom: 20px;"><div style="font-weight: bold;justify-content: space-between;display: flex;"><p>' + comments[i].username + '</p><p>' + formatDate(comments[i].postTime) + '</p></div><div>' + comments[i].content + '</div></li>'
  70. }
  71. $('.megList').html(html);
  72. }
  73. }
  74. //格式化时间
  75. function formatDate(date){
  76. var date1 = new Date(date);
  77. return date1.getFullYear() + '-' + (date1.getMonth()+1) + '-' + date1.getDate() + ' ' + date1.getHours() + ':' + date1.getMinutes() + ':' + date1.getSeconds()
  78. }

2)views/main/view.html

  1. {% extends 'layout.html' %} {% block content %}
  2. <div style="display: inline-block;vertical-align: top;background-color: #eae3e3;padding: 10px;box-shadow: 5px 5px 5px #c3baba;width: calc(100% - 250px);">
  3. <h2>{
  4. {content.title}}</h2>
  5. <div>
  6. <span>
  7. <span>作者:</span><a href="">{
  8. {content.user.username}}</a>
  9. </span>
  10. <span>
  11. <span>时间:</span><a href="">{
  12. {content.addTime|date('Y-m-d H:i:s',-8*60)}}</a>
  13. </span>
  14. <span>
  15. <span>阅读:</span><a href="">{
  16. {content.views}}</a>
  17. </span>
  18. <span>
  19. <span>评论:</span><a href="">{
  20. {content.comments.length}}</a>
  21. </span>
  22. </div>
  23. <div style="text-align: left;margin-top: 10px;">
  24. {
  25. {content.content}}
  26. </div>
  27. <div class="pinglun" style="margin-top: 20px;">
  28. <div>
  29. <strong style="float: left;margin-left: 10px;">评论区</strong>
  30. <span style="float: right;margin-right: 10px;">一共有<span class="pinglunshu"></span>条评论</span>
  31. </div>
  32. {% if userInfo._id %}
  33. <div style="text-align: left;">
  34. <textarea rows="3" style="width: calc(100% - 100px)" class="neirong"></textarea>
  35. <input type="hidden" id="contentId" value="{
  36. {content.id}}">
  37. <button style="width: 50px;vertical-align: text-bottom;" class="commentBtn">提交</button>
  38. </div>
  39. {% else %}
  40. <div style="text-align: center;padding-top: 30px;font-weight: bold;">您还没有登录,请先
  41. <a href="">登录</a>
  42. </div>
  43. {% endif %}
  44. <!-- <p style="text-align:left;">还没有留言</p> -->
  45. <ul style="text-align: left;" class="megList"></ul>
  46. <div class="a-page">
  47. <span class="pre">
  48. <a href="javascript:void(0)">上一页</a>
  49. </span>
  50. <span class="a-pageInfo"></span>
  51. <span class="next">
  52. <a href="javascript:void(0)">下一页</a>
  53. </span>
  54. </div>
  55. </div>
  56. </div>
  57. <script src="/public/js/comment.js"></script>
  58. {% endblock %}

3)views/main/layout.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>博客</title>
  6. <link rel="stylesheet" type="text/css" href="/public/css/main.css">
  7. <script type="text/javascript" src="/public/js/jquery-3.3.1.min.js"></script>
  8. <script type="text/javascript" src="public/js/index.js"></script>
  9. </head>
  10. <body>
  11. <div class="wrap">
  12. <div class="header">
  13. <ul>
  14. {% if category == '' %}
  15. <li><a href="/" class="focus">首页</a></li>
  16. {% else %}
  17. <li><a href="/">首页</a></li>
  18. {% endif %} {% for cate in categories %} {% if category == cate.id %}
  19. <li>
  20. <a href="/?category={
  21. {cate.id}}" class="focus">{
  22. {cate.name}}</a>
  23. </li>
  24. {% else %}
  25. <li>
  26. <a href="/?category={
  27. {cate.id}}">{
  28. {cate.name}}</a>
  29. </li>
  30. {% endif %} {% endfor %}
  31. </ul>
  32. </div>
  33. {% block content %}{% endblock %}
  34. <div class="info">
  35. {% if userInfo._id %}
  36. <div class="showInfo">
  37. <p class="infoTitle">用户信息</p>
  38. <div class="name">{
  39. {userInfo.username}}
  40. </div>
  41. {% if userInfo.isAdmin %}
  42. <div class="info">你好管理员,欢迎来到博客
  43. <a href="/admin">进入管理</a>
  44. </div>
  45. {% else %}
  46. <div class="info">
  47. 你好,欢迎来到博客
  48. </div>
  49. {% endif %}
  50. <button class="logout">退出</button>
  51. </div>
  52. {% else %}
  53. <div class="registerInfo">
  54. <form>
  55. <p class="infoTitle">注册</p>
  56. <div class="inputInfo">
  57. <label for="user">用户名</label>
  58. <input type="text" name="username" id="user">
  59. </div>
  60. <div class="inputInfo">
  61. <label for="pwd">密码</label>
  62. <input type="password" name="pwd" id="pwd">
  63. </div>
  64. <div class="inputInfo">
  65. <label for="rpwd">确认</label>
  66. <input type="password" name="rpwd" id="rpwd">
  67. </div>
  68. <div class="infoBtn">
  69. <input type="button" name="" value="注册" class="registerBtn">
  70. </div>
  71. <div class="infoBtn">
  72. <span>已有账号</span>
  73. <a href="javascript:void(0)" class="toLogin">马上登录</a>
  74. </div>
  75. <div class="registerRemind"></div>
  76. </form>
  77. </div>
  78. <div class="hide loginInfo">
  79. <form>
  80. <p class="infoTitle">登录</p>
  81. <div class="inputInfo">
  82. <label for="user2">用户名</label>
  83. <input type="text" name="user2" id="user2">
  84. </div>
  85. <div class="inputInfo">
  86. <label for="pwd2">密码</label>
  87. <input type="password" name="pwd2" id="pwd2">
  88. </div>
  89. <div class="infoBtn">
  90. <input type="button" name="" value="登录" class="loginBtn">
  91. </div>
  92. <div class="infoBtn">
  93. <span>还没注册</span>
  94. <a href="javascript:void(0)" class="toRegister">马上注册</a>
  95. </div>
  96. <div class="loginRemind"></div>
  97. </form>
  98. </div>
  99. {% endif %}
  100. <div>
  101. <p class="infoTitle">社区</p>
  102. <ul>
  103. <li>
  104. <a href="">制度规则</a>
  105. </li>
  106. <li>
  107. <a href="">社区之家</a>
  108. </li>
  109. </ul>
  110. </div>
  111. </div>
  112. </div>
  113. </body>
  114. </html>

发表评论

表情:
评论列表 (有 0 条评论,271人围观)

还没有评论,来说两句吧...

相关阅读