将对页面的操作装起来,向window上暴露一个page对象,通过page对象来完成对页面的操作,但是事件怎吗封装

    1. const page = (function () {
    2. const users = $('.users');
    3. const chatList = $('.chat-list');
    4. /**
    5. * 页面切换
    6. */
    7. function switchPage() {
    8. $('.login').hide();
    9. $('.chat').show();
    10. }
    11. /**
    12. * 添加用户
    13. * @param {*} name
    14. */
    15. function addUser(name) {
    16. $('<li>').attr('user', name).text(name).appendTo(users);
    17. totalPeo(1);
    18. addLog(`<span class="user">${name}</span> 进入聊天室`);
    19. chatList.scrollTop(chatList.prop('scrollHeight'), 0);
    20. }
    21. /**
    22. * 用户进入聊天室的信息提醒
    23. */
    24. function addLog(log) {
    25. $('<li>').addClass('log').html(log).appendTo(chatList);
    26. }
    27. /**
    28. * 上线人数
    29. * @param {*} num
    30. */
    31. function totalPeo(num) {
    32. const number = +$('.user-list .title span').text();
    33. $('.user-list .title span').text(number + num);
    34. }
    35. /**显示用户发送消息内容 */
    36. function addMsg(from, msg, to) {
    37. $('<li>')
    38. .html(
    39. `<span class="user">${from}</span>
    40. <span class="gray">对</span>
    41. <span class="user">${to ? to : '所有人'}</span>
    42. <span class="gray">说:</span>
    43. <span>${msg}</span>`
    44. )
    45. .appendTo(chatList);
    46. // 这句代码不理解
    47. chatList.scrollTop(chatList.prop('scrollHeight'), 0);
    48. }
    49. /**
    50. * 删除用户
    51. */
    52. function removeUser(name) {
    53. const li = users.find(`li[user="${name}"]`);
    54. if (!li) return;
    55. li.remove();
    56. totalPeo(-1);
    57. addLog(`<span class="user">${name}</span> 退出了聊天室`);
    58. }
    59. /**
    60. * 清空输入框
    61. */
    62. function clearInput() {
    63. $('.sendmsg input').text('');
    64. }
    65. /**
    66. * 初始化聊天室
    67. */
    68. function initChatRoom() {
    69. users.html(`<li class="all">所有人</li>`);
    70. $('.user-list .title span').text(0);
    71. chatList.html(`<li class="log">欢迎来到聊天室</li>`);
    72. }
    73. /**
    74. * 信息接收者
    75. * @returns
    76. */
    77. function getTargetUser() {
    78. const user = $('.sendmsg .user').text();
    79. return user === '所有人' ? null : user;
    80. }
    81. /**
    82. * 切换信息接收者
    83. */
    84. users.click((e) => {
    85. console.log(e.target.tagName);
    86. if (e.target.tagName == 'LI') {
    87. $('.sendmsg .user').text($(e.target).text().trim());
    88. }
    89. });
    90. return {
    91. // 用户昵称
    92. me: null,
    93. sendText: null,
    94. switchPage,
    95. addUser,
    96. addMsg,
    97. totalPeo,
    98. clearInput,
    99. removeUser,
    100. initChatRoom,
    101. getTargetUser,
    102. // 需要websocekt使用的方法
    103. onLogin: null,
    104. onSendMsg: null,
    105. };
    106. })();
    107. // 事件监听
    108. (function () {
    109. /**
    110. * 输入昵称
    111. */
    112. $('.login .form input').keydown((e) => {
    113. if (e.key === 'Enter') {
    114. page.me = $(e.target).val();
    115. page.onLogin && page.onLogin(page.me);
    116. }
    117. });
    118. $('.sendmsg input').keydown((e) => {
    119. if (e.key === 'Enter') {
    120. page.onSendMsg && page.onSendMsg(page.me, $(e.target).val(), page.getTargetUser());
    121. page.clearInput();
    122. }
    123. });
    124. })();