{"html":"<!DOCTYPE html>\n<html>\n\n<head>\n <meta charset=\"UTF-8\">\n <style>\n .demo {\n margin-bottom: 20px;\n border: 1px solid #ebedf0;\n border-radius: 2px;\n padding: 10px;\n }\n\n .demo div {\n margin-bottom: 10px;\n font-size: 14px;\n }\n\n .pagination {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n font-size: 14px;\n line-height: 1.5;\n list-style: none;\n display: inline-block;\n }\n\n .pagination.hide {\n display: none;\n }\n\n .pagination li {\n position: relative;\n display: inline-block;\n float: left;\n height: 32px;\n margin: 0;\n padding: 0 15px;\n line-height: 30px;\n background: #fff;\n border: 1px solid #d9d9d9;\n border-top-width: 1.02px;\n border-left: 0;\n cursor: pointer;\n transition: color 0.3s, border-color 0.3s;\n }\n\n .pagination li:first-child {\n border-left: 1px solid #d9d9d9;\n border-radius: 4px 0 0 4px;\n }\n\n .pagination li:last-child {\n border-radius: 0 4px 4px 0;\n }\n\n .pagination li:first-child {\n box-shadow: none !important;\n }\n\n .pagination li.current {\n border-color: #1890ff;\n color: #1890ff;\n border-left: 1px solid #1890ff;\n }\n\n .pagination li.current:not(:first-child) {\n margin-left: -1px;\n }\n </style>\n</head>\n\n<body>\n <div>\n <div id=\"jsContainer\">\n <ul class=\"pagination\">\n <li>首页</li>\n <li>8</li>\n <li>9</li>\n <li class=\"current\">10</li>\n <li>11</li>\n <li>12</li>\n <li>末页</li>\n </ul>\n </div>\n\n <div class=\"demo\">\n <div>(Demo1) total: 10,current: 4</div>\n <ul class=\"pagination\">\n <li>首页</li>\n <li>2</li>\n <li>3</li>\n <li class=\"current\">4</li>\n <li>5</li>\n <li>6</li>\n <li>末页</li>\n </ul>\n </div>\n\n <div class=\"demo\">\n <div>(Demo2) total: 0,current: 0</div>\n <ul class=\"pagination hide\"></ul>\n </div>\n\n <div class=\"demo\">\n <div>(Demo3) total: 3,current: 2</div>\n <ul class=\"pagination\">\n <li>1</li>\n <li class=\"current\">2</li>\n <li>3</li>\n </ul>\n </div>\n\n <div class=\"demo\">\n <div>(Demo4) total: 10,current: 2</div>\n <ul class=\"pagination\">\n <li>1</li>\n <li class=\"current\">2</li>\n <li>3</li>\n <li>4</li>\n <li>5</li>\n <li>末页</li>\n </ul>\n </div>\n\n <div class=\"demo\">\n <div>(Demo5) total: 10,current: 9</div>\n <ul class=\"pagination\">\n <li>首页</li>\n <li>6</li>\n <li>7</li>\n <li>8</li>\n <li class=\"current\">9</li>\n <li>10</li>\n </ul>\n </div>\n </div>\n <script type=\"text/javascript\">\n function Pagination(container, total, current) {\n this.total = total\n this.current = current\n this.html = html\n this.val = val\n this.el = document.createElement('ul') //TODO: 创建分页组件根节点\n if (!this.el) return\n\n this.el.innerHTML = this.html()\n container.appendChild(this.el)\n if (this.total <= 1) this.el.classList = 'hide' //TODO: 判断是否需要隐藏当前元素\n\n // 主要内容\n function html() {\n let str = ''\n if (this.total <= 1) return ''\n if (this.total <= 5) {\n for (let i = 1; i <= this.total; i++) {\n str += `\n <li class='${this.current === i ? 'current' : ''}'>${i}</li>\n `\n }\n } else {\n let start = this.current > this.total - 2 ? this.total - 4 : this.current - 2 > 0 ? this.current - 2 : 1\n let end = this.current + 2 < this.total ? (this.current + 2 > 5 ? this.current + 2 : 5) : this.total\n if (start > 1) {\n str += `\n <li>首页</li>\n `\n }\n for (let i = start; i <= end; i++) {\n str += `<li class='${this.current === i ? 'current' : ''}'>${i}</li>`\n }\n if (end < this.total) {\n str += `\n <li>末页</li>\n `\n }\n }\n // console.log(str);\n //TODO: 生成组件的内部html字符串\n return str\n }\n\n // 设置当前页\n function val(current) {\n if (arguments.length === 0) return this.current\n if (current < 1 || current > this.total || current === this.current) return\n this.current = current\n this.el.innerHTML = this.html()\n }\n }\n </script>\n</body>\n\n</html>","css":"","js":""}