first commit

This commit is contained in:
2024-12-10 12:20:05 +08:00
commit f866087c7e
37 changed files with 2080 additions and 0 deletions

44
css/page/domestic.css Normal file
View File

@@ -0,0 +1,44 @@
@import "../tool/color.css";
@import "../tool/size.css";
@import "../tool/utils.css";
.type_list {
overflow-x: scroll;
height: .8rem;
li {
flex-shrink: 0;
font-size: var(--f16);
color: var(--textColor);
margin-right: var(--f10);
position: relative;
&:last-child {
margin-right: 0;
}
}
.active {
&::after {
content: "";
width: .6rem;
height: .1rem;
border-radius: .5rem;
background: var(--themeColor);
display: inline-block;
position: absolute;
bottom: -0.24rem;
left: 50%;
transform: translateX(-50%);
}
}
}
.type_list_content {
.swiper-slide {
font-size: var(--f16);
height: calc(100vh - .96rem - .8rem - 1rem);
overflow-y: scroll;
}
.default-model {
margin-top: 0 !important;
}
}

0
css/page/hot.css Normal file
View File

62
css/page/index.css Normal file
View File

@@ -0,0 +1,62 @@
/* 首页的css */
@import "../tool/color.css";
@import "../tool/size.css";
@import "../tool/utils.css";
.header {
.search {
font-size: var(--f15);
margin-top: .16rem;
color: var(--tipsTextColor);
height: 80%;
background: #f5f5f5;
border-radius: .5rem;
padding: 0 .2rem;
box-sizing: border-box;
i {
margin-right: .16rem;
}
p {
}
}
}
.content {
padding-top: 20px;
.banner {
width: calc(100% - .6rem);
border-radius: .6rem;
transform :translateY(0);
img {
width: 100%;
border-radius: .6rem;
}
.swiper-slide{
overflow: hidden;
}
}
.recommend-tag {
margin: 0.4rem 0;
justify-content: space-between;
li {
color: var(--textColor);
display: flex;
flex-direction: column;
align-items: center;
.icon {
font-size: var(--f25);
margin-bottom: .14rem;
}
.title {
font-size: var(--f14);
color: var(--tipsTextColor);
}
}
}
}

44
css/page/info.css Normal file
View File

@@ -0,0 +1,44 @@
@import "../tool/color.css";
@import "../tool/size.css";
@import "../tool/utils.css";
.header {
.ilist {
i {
font-size: var(--f22) !important;
}
.icon-wujiaoxing {
margin-right: var(--f10);
}
}
}
.content {
.info_img_list {
.img_list {
height: 800px;
overflow: hidden;
img {
width: 100%;
}
}
.view_all {
font-size: var(--f16);
color: var(--themeColor);
width: 100%;
height: 60px;
bottom: 0;
background: linear-gradient(#ffffff08, #fefefe);
padding-top: .6rem;
box-sizing: border-box;
div {}
i {
margin-left: .1rem;
}
}
}
}

0
css/page/me.css Normal file
View File

51
css/page/search.css Normal file
View File

@@ -0,0 +1,51 @@
@import "../tool/color.css";
@import "../tool/size.css";
@import "../tool/utils.css";
.header {
color: var(--textColor);
input {
margin: 0 .16rem;
font-size: var(--f15);
color: var(--tipsTextColor);
height: 80%;
background: #f5f5f5;
border-radius: .5rem;
padding: 0 .2rem;
box-sizing: border-box;
}
div {
font-size: 0.32rem !important;
}
}
.content {
.no-search {
padding-top: .4rem;
}
.have-search {
padding-top: .02rem;
}
.search_list {
margin-bottom: .7rem;
.title {
height: 40px;
font-size: var(--f13);
color: var(--tipsTextColor);
margin-bottom: 0.14rem;
}
ul {
li {
padding: 0 var(--f10);
margin-bottom: .16rem;
a {
font-size: var(--f16);
color: var(--textColor);
}
}
}
}
}

0
css/page/tagListInfo.css Normal file
View File

521
css/tool/clear.css Normal file
View File

@@ -0,0 +1,521 @@
/* 清除默认样式 */
/*
* Copyright (c) 2020. bmy
*/
.iconfont {
font-size: .32rem;
}
p,
body,
h1,
h2,
h3,
h4,
h5,
h6,
ul,
li {
margin: 0;
padding: 0;
}
html {
font-family: sans-serif;
/* 1 */
line-height: 1;
}
body {
width: 100%;
font-size: 0px;
background-color: #fff;
color: rgba(0, 0, 0, 0.87);
}
::-webkit-scrollbar {
width: 0;
height: 0;
}
a {
color: #000;
}
li {
list-style: none;
}
article,
aside,
footer,
header,
nav,
section {
display: block;
}
/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/* Grouping content
========================================================================== */
/**
* Add the correct display in IE 9-.
* 1. Add the correct display in IE.
*/
figcaption,
figure,
main {
/* 1 */
display: block;
}
/**
* Add the correct margin in IE 8.
*/
figure {
margin: 1em 40px;
}
/**
* 1. Add the correct box sizing in Firefox.
* 2. Show the overflow in Edge and IE.
*/
hr {
box-sizing: content-box;
/* 1 */
height: 0;
/* 1 */
overflow: visible;
/* 2 */
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
pre {
font-family: monospace, monospace;
/* 1 */
font-size: 1em;
/* 2 */
white-space: pre-wrap;
word-break: break-all;
margin: 0;
}
/* Text-level semantics
========================================================================== */
/**
* 1. Remove the gray background on active links in IE 10.
* 2. Remove gaps in links underline in iOS 8+ and Safari 8+.
*/
a {
text-decoration: none;
background-color: transparent;
/* 1 */
-webkit-text-decoration-skip: objects;
/* 2 */
user-select: none;
-webkit-user-select: none;
}
/**
* Remove the outline on focused links when they are also active or hovered
* in all browsers (opinionated).
*/
a:active,
a:hover {
outline-width: 0;
}
/**
* 1. Remove the bottom border in Firefox 39-.
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
*/
abbr[title] {
border-bottom: none;
/* 1 */
text-decoration: underline;
/* 2 */
text-decoration: underline dotted;
/* 2 */
}
/**
* Prevent the duplicate application of `bolder` by the next rule in Safari 6.
*/
b,
strong {
font-weight: inherit;
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
b,
strong {
font-weight: bolder;
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp {
font-family: monospace, monospace;
/* 1 */
font-size: 1em;
/* 2 */
}
/**
* Add the correct font style in Android 4.3-.
*/
dfn {
font-style: italic;
}
/**
* Add the correct background and color in IE 9-.
*/
mark {
background-color: #ff0;
color: #000;
}
/**
* Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` elements from affecting the line height in
* all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/* Embedded content
========================================================================== */
/**
* Add the correct display in IE 9-.
*/
audio,
video {
display: inline-block;
}
/**
* Add the correct display in iOS 4-7.
*/
audio:not([controls]) {
display: none;
height: 0;
}
/**
* Remove the border on images inside links in IE 10-.
*/
img {
border-style: none;
}
/**
* Hide the overflow in IE.
*/
svg:not(:root) {
overflow: hidden;
}
/* Forms
========================================================================== */
/**
* 1. Change the font styles in all browsers (opinionated).
* 2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
border: none;
outline: none;
font-family: sans-serif;
/* 1 */
font-size: 100%;
/* 1 */
line-height: 1.15;
/* 1 */
margin: 0;
/* 2 */
}
/**
* Show the overflow in IE.
* 1. Show the overflow in Edge.
*/
button,
input {
/* 1 */
overflow: visible;
}
/**
* Remove the inheritance of text transform in Edge, Firefox, and IE.
* 1. Remove the inheritance of text transform in Firefox.
*/
button,
select {
/* 1 */
text-transform: none;
}
/**
* 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`
* controls in Android 4.
* 2. Correct the inability to style clickable types in iOS and Safari.
*/
button,
html [type="button"],
/* 1 */
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
/* 2 */
}
/**
* Remove the inner border and padding in Firefox.
*/
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
* Restore the focus styles unset by the previous rule.
*/
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
* Change the border, margin, and padding in all browsers (opinionated).
*/
fieldset {
border: 1px solid #c0c0c0;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Correct the color inheritance from `fieldset` elements in IE.
* 3. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/
legend {
box-sizing: border-box;
/* 1 */
color: inherit;
/* 2 */
display: table;
/* 1 */
max-width: 100%;
/* 1 */
padding: 0;
/* 3 */
white-space: normal;
/* 1 */
}
/**
* 1. Add the correct display in IE 9-.
* 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
display: inline-block;
/* 1 */
vertical-align: baseline;
/* 2 */
}
/**
* Remove the default vertical scrollbar in IE.
*/
textarea {
overflow: auto;
resize: vertical;
}
/**
* 1. Add the correct box sizing in IE 10-.
* 2. Remove the padding in IE 10-.
*/
[type="checkbox"],
[type="radio"] {
box-sizing: border-box;
/* 1 */
padding: 0;
/* 2 */
}
/**
* Correct the cursor style of increment and decrement buttons in Chrome.
*/
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/
[type="search"] {
-webkit-appearance: textfield;
/* 1 */
outline-offset: -2px;
/* 2 */
}
/**
* Remove the inner padding and cancel buttons in Chrome and Safari on macOS.
*/
[type="search"]::-webkit-search-cancel-button,
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button;
/* 1 */
font: inherit;
/* 2 */
}
/* Interactive
========================================================================== */
/*
* Add the correct display in IE 9-.
* 1. Add the correct display in Edge, IE, and Firefox.
*/
details,
/* 1 */
menu {
display: block;
}
/*
* Add the correct display in all browsers.
*/
summary {
display: list-item;
}
/* Scripting
========================================================================== */
/**
* Add the correct display in IE 9-.
*/
canvas {
display: inline-block;
}
/**
* Add the correct display in IE.
*/
template {
display: none;
}
/* Hidden
========================================================================== */
/**
* Add the correct display in IE 10-.
*/
[hidden] {
display: none;
}

9
css/tool/color.css Normal file
View File

@@ -0,0 +1,9 @@
/* 存在项目中用到的很多颜色 */
:root {
--swiper-theme-color: var(--themeColor) !important;
--themeColor: #fb7299;
--whiteColor: #fff;
--textColor: #050505;
--tipsTextColor: #929292;
}

166
css/tool/public.css Normal file
View File

@@ -0,0 +1,166 @@
/* 页面公用的css样式 */
@import "./color.css";
@import "./size.css";
@import "./utils.css";
.header {
width: 100%;
left: 0;
top: 0;
background-color: var(--whiteColor);
height: .96rem;
z-index: 999;
padding-top: .08rem;
.icon-fanhui {
font-size: .44rem !important;
}
}
.content {
margin-top: .96rem;
margin-bottom: 1rem;
}
.footer {
width: 100%;
left: 0;
bottom: 0;
height: 1rem;
background: var(--whiteColor);
z-index: 999;
.active {
a {
color: var(--themeColor);
}
}
li {
a {
display: flex;
flex-direction: column;
align-items: center;
color: var(--blackColor);
p {
font-size: 0.22rem;
margin-top: 0.1rem;
}
i {
font-size: .38rem;
}
}
}
}
/* 这是 theme = 1 的默认布局(垂直)样式
1可以横向滑动
2一行两个 default-model
*/
.recommend-model {
.title {
height: 45px;
font-size: var(--f19);
font-weight: bolder;
}
.list {
margin-top: .3rem;
overflow-x: scroll;
}
li {
width: 3rem;
margin-right: .2rem;
flex-shrink: 0;
&:last-child {
margin-right: 0;
}
a {
img {
width: 100%;
height: 225px;
margin-bottom: .18rem;
border-radius: .14rem;
object-fit: cover;
}
.text {
font-size: var(--f17);
color: var(--textColor);
margin-bottom: .12rem;
}
.desc {
font-size: var(--f10);
color: var(--tipsTextColor);
.time {}
.view {
.icon-yanjing {
margin-right: .06rem;
}
span {}
}
}
}
}
}
.default-model {
margin-top: .8rem;
.list {
flex-wrap: wrap;
overflow-x: auto;
li {
width: 3.32rem;
margin-bottom: .4rem;
&:nth-child(2n) {
margin-right: 0;
}
}
}
}
/* 这是 theme = 2 的布局样式代码
图片和文字左右布局
*/
.item-theme-horizontally {
width: 100% !important;
a {
display: flex;
img {
width: 1.8rem !important;
height: 1.26rem !important;
flex-shrink: 0;
}
.r {
width: calc(100% - 96px);
margin-left: .1rem;
}
.text {
overflow: visible;
white-space: revert;
font-size: var(--f14) !important;
line-height: 1.4;
}
}
}

20
css/tool/size.css Normal file
View File

@@ -0,0 +1,20 @@
/* 网页的字体 */
:root {
--f10: .2rem;
--f11: .22rem;
--f12: .24rem;
--f13: .26rem;
--f14: .28rem;
--f15: .3rem;
--f16: .32rem;
--f17: .34rem;
--f18: .36rem;
--f19: .38rem;
--f20: .4rem;
--f21: .42rem;
--f22: .44rem;
--f23: .46rem;
--f24: .48rem;
--f25: .5rem;
--f26: .52rem;
}

69
css/tool/utils.css Normal file
View File

@@ -0,0 +1,69 @@
/* 公共的css方法 */
.flex {
display: flex;
}
.ais {
align-items: center;
}
.jc {
justify-content: center;
}
.js {
justify-content: space-between;
}
.ja {
justify-content: space-around
}
.wrap {
flex-wrap: wrap;
}
.flex1 {
flex: 1
}
.column {
flex-direction: column;
}
.fixed {
position: fixed;
}
.relative {
position: relative;
}
.absolute {
position: absolute;
}
.border-box {
box-sizing: border-box;
}
.p15{
padding: 0 var(--f15);
}
.p25{
padding: 0 var(--f25);
}
.ellipsis {
overflow:hidden;
text-overflow:ellipsis;
white-space:nowrap;
}
.header_title {
color: var(--textColor);
font-size: var(--f16);
margin: 0 .16rem;
}

43
js/config/index.js Normal file
View File

@@ -0,0 +1,43 @@
// var let
// 定义的新方式 let
let config = {
stage: "dev", // dev test prod
// http://127.0.0.1:8090/app/user/UserInfo
// 基地址 http://127.0.0.1:8090/app
// 短地址 /user/UserInfo
// 基地址都被 ajax封装调用
devUrl: 'http://[240e:362:220c:b200::906]:9940/v1/api',
testUrl: 'http://192.168.31.101:3030/test/api',
prodUrl: 'https://pc.buyusdt.xyz/v1/api',
// 帮助ajax判断应该用哪一个基地址
checkUrl: function () {
switch (this.stage) {
case "dev":
return this.devUrl
break;
case "test":
return this.testUrl
break;
case "prod":
return this.prodUrl
break;
}
},
// 短地址 都被 serve 调用
urlList: {
homeHot: '/home/hot',
homeList: '/home/list',
homeBanner: '/home/banner',
infoList: '/info/list',
tagList: '/tag/list',
tagRecommend: '/tag/recommend',
tagInfo: '/tag/info',
searchHot: '/search/hot',
searchKey: '/search/key',
}
}

49
js/http/index.js Normal file
View File

@@ -0,0 +1,49 @@
class Ajax {
xhr = new XMLHttpRequest()
get(option) {
$("body").mLoading("show")
return new Promise((succ, err) => {
// jquery 是通过 callback 来对异步ajax代码进行封装的
$.ajax({
type: "GET",
// http://192.168.31.101:9940/v1/api + /home/banner
url: config.checkUrl() + option.url,
data: option.data,
success: res => {
$("body").mLoading("hide")
succ( this.stateChange(res) )
},
error: msg => {
err(msg)
}
});
})
}
post(option) {
return new Promise((success, error) => {
})
}
// 对业务状态码进行判断
stateChange(res) {
switch (res.status) {
case 200:
return res.data
break;
case 404:
alert(res.message)
err(this.xhr)
break;
default:
break;
}
}
}

57
js/http/index.js-old Normal file
View File

@@ -0,0 +1,57 @@
class Ajax {
xhr = new XMLHttpRequest()
get(option) {
return new Promise((success, error) => {
var params = ""
for (const key in option.data) {
params += `&${key}=${option.data[key]}`
}
params = params.replace("&", "?")
// option.url == /home/hot?id=1
this.xhr.open("GET", `${config.checkUrl()}${option.url}${params}`)
this.xhr.send()
this.stateChange(success, error)
})
}
post(option) {
return new Promise((success, error) => {
this.xhr.open("POST", option.url)
this.xhr.setRequestHeader("Content-Type", "application/json")
// post 参数在请求体(body)中发送
this.xhr.send(JSON.stringify(option.data))
this.stateChange(success, error)
})
}
stateChange(suc, err) {
this.xhr.onreadystatechange = () => {
if (this.xhr.readyState == 4) {
if (this.xhr.status == 200) {
let res = JSON.parse(this.xhr.response)
switch (res.status) {
case 200:
suc(res.data)
break;
case 404:
alert(res.message)
err(this.xhr)
break;
default:
break;
}
suc()
} else {
err(this.xhr)
}
}
}
}
}

2
js/lib/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

14
js/lib/swiper-bundle.min.js vendored Normal file

File diff suppressed because one or more lines are too long

136
js/page/domestic.js Normal file
View File

@@ -0,0 +1,136 @@
class Domestic {
mySwiper = null;
tagList = [];
index = localStorage.getItem("index") || 0;
// 原生js dom操作全部忘记都没关系
// diff 虚拟dom 映射(局部渲染) 到真实dom
constructor() {
header(
`<div class="header_title flex1 ellipsis">分类</div>`,
``,
``
)
footer()
this.getTagServeData()
}
async getTagServeData() {
let self = this;
this.tagList = await tagServe.tagList()
console.log(this.tagList);
eachHtml(
".type_list",
this.tagList,
(v, i) => `<li class="${i == this.index ? 'active' : ''}">${v.title}</li>`
)
$(".swiper-wrapper").append(
this.tagList.map(v => {
return `<div class="swiper-slide recommend-model default-model">
<ul class="flex list p15 js"></ul>
</div>`
})
)
$(".type_list li").click(function () {
$(this).addClass("active").siblings().removeClass("active")
self.mySwiper.slideTo($(this).index())
})
this.initSwiper()
if (this.index == 0) {
await this.getTagInfoData()
} else {
console.log("this.index: ", this.index);
this.mySwiper.slideTo(this.index)
}
this.onIScroll()
}
// 第一次调用 点击按钮(滑动轮播图) click
// 第二次调用 滚动加载 scroll
async getTagInfoData(type = "click") {
let loadData = async () => {
let { totalPage, list } = await tagServe.tagInfo({
url: this.tagList[this.index].url,
page: this.tagList[this.index].page
})
this.tagList[this.index].totalPage = totalPage
this.tagList[this.index].content = [
...this.tagList[this.index].content,
...list
]
// 向不同的 ul 中插入不同的内容
eachHtml(
// $(".swiper-slide ul") 返回的是数组
// eq 用来获取数组+下标的
// [1,2,3][0] 取到的虚拟dom这种无法使用jquery方法
$(".swiper-slide ul").eq(this.index),
list,
(v) => item(v)
)
//this.onIScroll()
}
if (type == "click") {
if (this.tagList[this.index].content.length == 0) {
// 加载请求
loadData()
}
} else {
// 加载请求
loadData()
}
}
initSwiper() {
let self = this;
this.mySwiper = new Swiper('.type_list_content', {
on: {
slideChange: async function () {
self.index = this.activeIndex
localStorage.setItem("index", self.index)
await self.getTagInfoData()
$(".type_list li").eq(this.activeIndex).addClass("active").siblings().removeClass("active")
},
},
})
}
onIScroll() {
let self = this;
// $(window)
$(".swiper-slide").scroll(async function () {
let scrollTop = $(this).scrollTop();
let ulHeight = $(this).find("ul").height()
// 可视区域高度 529
let windowHeight = $(this).height();
console.log("scrollTop: ", scrollTop);
console.log("windowHeight: ", windowHeight);
console.log("ulHeight: ", ulHeight);
if (Math.round(scrollTop + windowHeight - 15) >= parseInt(ulHeight)) {
console.log("到底部");
self.tagList[self.index].page += 1
if (self.tagList[self.index].page <= self.tagList[self.index].totalPage) {
await self.getTagInfoData("scroll")
}
}
});
}
}
new Domestic

7
js/page/hot.js Normal file
View File

@@ -0,0 +1,7 @@
class Hot {
constructor() {
}
}
new Hot

79
js/page/index.js Normal file
View File

@@ -0,0 +1,79 @@
class Index {
constructor() {
header(`
<div class="search flex1 flex ais">
<i class="iconfont icon-sousuo-m"></i>
<p>开启精彩搜索..</p>
</div>
`, '', '')
// 虚拟domjs对象虚拟dom的数组[{},{}]
// 数组不是原生数组是jq定义的数组
// console.log($("body")[0].innerHTML = ``);
// console.log($("body").html(`a`));
footer()
this.getHomeBannerData()
this.getHomeHotData()
this.getHomeListData()
this.getTagRecommendData()
this.event()
}
event() {
$(".search").click(() => {
location.href = "./search.html"
})
}
async getTagRecommendData() {
eachHtml(
".recommend-tag",
await tagServe.tagRecommend(),
(v) => `
<li>
<a class="icon" href="./tagListInfo.html?url=${v.url}&title=${v.title}">${v.title.substr(0,1)}</a>
<a class="title" href="./tagListInfo.html?url=${v.url}&title=${v.title}">${v.title}</a>
</li>
`
)
}
async getHomeBannerData() {
eachHtml(
".swiper-wrapper",
await homeServe.homeBanner(),
(v) => `<div class="swiper-slide"><img src="${v.src}" alt=""></div>`
)
this.initSwiper()
}
async getHomeListData() {
eachHtml(
".default-model ul",
await homeServe.homeList(),
(v) => item(v)
)
}
async getHomeHotData() {
eachHtml(
".recommend-horizontally ul",
await homeServe.homeHot(),
(v) => item(v)
)
}
initSwiper() {
new Swiper('.banner', {
loop: true,
pagination: {
el: '.swiper-pagination',
},
})
}
}
new Index

97
js/page/info.js Normal file
View File

@@ -0,0 +1,97 @@
class Info {
title = "";
defaultArr = []
allArr = [];
like = JSON.parse(localStorage.getItem("like")) || [];
constructor() {
this.init()
}
async init() {
await this.getInfoListData()
header(
`<div class="header_title flex1 ellipsis">${this.title}</div>`,
`
<div class="ilist">
<i class="iconfont icon-wujiaoxing"></i>
<i class="iconfont icon-fenxiang"></i>
</div>
`
)
this.event()
}
async getInfoListData() {
let { title, src_list, recommend } = await infoServe.infoList({
id: query("id")
})
this.title = title
this.defaultArr = src_list.splice(0, 2)
this.allArr = src_list
eachHtml(
".info_img_list .img_list",
this.defaultArr,
(v) => `<img src="${v}" alt="">`
)
eachHtml(
".default-model ul",
recommend,
(v) => item(v)
)
}
event() {
this.like.filter(v => v.id == query("id")).length != 0
? $(".icon-wujiaoxing").addClass("icon-wujiaoxing1")
: null
$(".icon-fenxiang").click(async () => {
await navigator.clipboard.writeText(`
我这有个好看的,快来看看 ${this.title}
${location.href}
`)
alert("内容已复制")
})
$(".icon-wujiaoxing").click(() => {
// 如果有icon-wujiaoxing1表示收藏过了
if ($(".icon-wujiaoxing").hasClass("icon-wujiaoxing1")) {
this.like = this.like.filter(v => v.id != query("id"))
// 没有 icon-wujiaoxing1表示未收藏过了
} else {
this.like.push({
"id": query("id"),
"thumbnail": this.defaultArr[0],
"title": this.title,
"time": query("time"),
"view": "42"
})
}
localStorage.setItem("like", JSON.stringify(this.like))
$(".icon-wujiaoxing").toggleClass("icon-wujiaoxing1")
})
$(".view_all").click(() => {
$(".img_list").css({ height: 'auto' })
eachHtml(
".info_img_list .img_list",
this.allArr,
(v) => `<img src="${v}" alt="">`
)
$(".view_all").css({ display: 'none' })
})
}
}
new Info

6
js/page/me.js Normal file
View File

@@ -0,0 +1,6 @@
class Me {
constructor() {
}
}
new Me

76
js/page/search.js Normal file
View File

@@ -0,0 +1,76 @@
class Search {
page = 1;
totalPage = 0;
keyword = "";
constructor() {
header(
`<input class="flex1" type="text" placeholder="输入关键字">`,
`<div class="button">搜索</div>`,
`<i class="iconfont icon-fanhui"></i>`
)
this.getSearchHotData()
this.enevt()
}
async getSearchHotData() {
let { hotKeyword, recommend } = await searchServe.searchHot()
eachHtml(
'.search_list ul',
hotKeyword,
(v) => `<li><a>${v}</a></li>`
)
$(".search_list ul li").click(function () {
$(".header input").val($(this).text())
$(".header .button").click()
})
eachHtml(
'.search_recommend',
recommend,
(v) => item(v, 2)
)
}
async getSearchKeyData() {
let { totalPage, list } = await searchServe.searchKey({
keyword: this.keyword,
page: this.page
})
this.totalPage = totalPage
eachHtml(
'.have-search ul',
list,
(v) => item(v)
)
$(".no-search").hide()
$(".have-search").show()
}
enevt() {
$(".header .button").click(async () => {
if ($(".header input").val().length != 0) {
this.keyword = $(".header input").val()
await this.getSearchKeyData()
}
})
$(".header input").on("input", function () {
if ($(".header input").val().length == 0) {
$(".no-search").show()
$(".have-search").hide()
}
});
}
}
new Search

6
js/page/tagListInfo.js Normal file
View File

@@ -0,0 +1,6 @@
class TagListInfo {
constructor() {
}
}
new TagListInfo

35
js/serve/home.js Normal file
View File

@@ -0,0 +1,35 @@
class HomeServe {
// data 是接口请求的参数,默认为空对象,表示这个接口不需要参数
async homeHot (data = {}) {
let http = new Ajax()
// suc的返回值ajax请求到的后端给我们的数据
return await http.get({
url: config.urlList.homeHot,
// data: data key 和 value 名字一样的时候,可以直接只写一个
data
})
}
async homeBanner (data = {}) {
let http = new Ajax()
// suc的返回值ajax请求到的后端给我们的数据
return await http.get({
url: config.urlList.homeBanner,
// data: data key 和 value 名字一样的时候,可以直接只写一个
data
})
}
async homeList (data = {}) {
let http = new Ajax()
// suc的返回值ajax请求到的后端给我们的数据
return await http.get({
url: config.urlList.homeList,
// data: data key 和 value 名字一样的时候,可以直接只写一个
data
})
}
}
let homeServe = new HomeServe

14
js/serve/info.js Normal file
View File

@@ -0,0 +1,14 @@
class InfoServe {
// data 是接口请求的参数,默认为空对象,表示这个接口不需要参数
async infoList (data = {}) {
let http = new Ajax()
// suc的返回值ajax请求到的后端给我们的数据
return await http.get({
url: config.urlList.infoList,
// data: data key 和 value 名字一样的时候,可以直接只写一个
data
})
}
}
let infoServe = new InfoServe

28
js/serve/search.js Normal file
View File

@@ -0,0 +1,28 @@
class SearchServe {
// data 是接口请求的参数,默认为空对象,表示这个接口不需要参数
async searchHot (data = {}) {
let http = new Ajax()
// suc的返回值ajax请求到的后端给我们的数据
return await http.get({
url: config.urlList.searchHot,
// data: data key 和 value 名字一样的时候,可以直接只写一个
data
})
}
async searchKey (data = {}) {
let http = new Ajax()
// suc的返回值ajax请求到的后端给我们的数据
return await http.get({
url: config.urlList.searchKey,
// data: data key 和 value 名字一样的时候,可以直接只写一个
data
})
}
}
let searchServe = new SearchServe

43
js/serve/tag.js Normal file
View File

@@ -0,0 +1,43 @@
class TagServe {
// 简化我们的ajax请求过程
// 可以实现对接口返回数据的修改
// data 是接口请求的参数,默认为空对象,表示这个接口不需要参数
async tagList (data = {}) {
let http = new Ajax()
// suc的返回值ajax请求到的后端给我们的数据
let res = await http.get({
url: config.urlList.tagList,
// data: data key 和 value 名字一样的时候,可以直接只写一个
data
})
res.forEach(v => {
v.content = [];
v.totalPage = 0;
v.page = 1;
});
return res;
}
async tagInfo (data = {}) {
let http = new Ajax()
// suc的返回值ajax请求到的后端给我们的数据
return await http.get({
url: config.urlList.tagInfo,
// data: data key 和 value 名字一样的时候,可以直接只写一个
data
})
}
async tagRecommend (data = {}) {
let http = new Ajax()
// suc的返回值ajax请求到的后端给我们的数据
return await http.get({
url: config.urlList.tagRecommend,
// data: data key 和 value 名字一样的时候,可以直接只写一个
data
})
}
}
let tagServe = new TagServe

77
js/utils/index.js Normal file
View File

@@ -0,0 +1,77 @@
class Utils {
header(content, action, back = `<i class="iconfont icon-fanhui"></i>`) {
$("body").prepend(`
<div class="header fixed flex ais flex1 border-box p15">
${back}
${content}
${action}
</div>
`)
$(".icon-fanhui").click(() => history.back())
}
eachHtml(dom, data, callback) {
$(dom).append(
data.map((v,i) => callback(v,i))
)
}
item(v, theme = 1) {
return `
<li class="${theme == 2 ? 'item-theme-horizontally' : ''}">
<a href="./info.html?id=${v.id}&time=${v.time}">
<img src="${v.thumbnail}" alt="">
<div class="r">
<div class="text ellipsis">${v.title}</div>
<div class="desc flex ais js">
<div class="time">${v.time}</div>
<div class="view flex ais">
<i class="iconfont icon-yanjing"></i>
<span>${v.view}</span>
</div>
</div>
</div>
</a>
</li>
`
}
footer() {
// ajax 接口返回的底部导航数据
let arr = [
{ icon: 'icon-shouye', title: '首页', href: 'index.html' },
{ icon: 'icon-changchenglogo', title: '分类', href: 'domestic.html' },
{ icon: 'icon-hot', title: '热门', href: 'hot.html' },
{ icon: 'icon-wo', title: '我的', href: 'me.html' },
]
$("body").append(`
<ul class="footer fixed flex ja ais">
${arr.map(v => {
return `
<li class="${location.pathname.includes(v.href) ? 'active' : ''}">
<a href="${v.href}">
<i class="iconfont ${v.icon}"></i>
<p>${v.title}</p>
</a>
</li>`
})}
</ul>
`)
}
query(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return decodeURIComponent(r[2]); return null;
}
}
let u = new Utils
let util = u,
{
header, eachHtml, item,
footer, query
}
= u

10
js/utils/rem.js Normal file
View File

@@ -0,0 +1,10 @@
(function (w, d) {
function setSize() {
var screenWidth = d.documentElement.clientWidth;
var currentFontSize = (screenWidth * 100) / 750;
d.documentElement.style.fontSize = currentFontSize + "px";
}
w.addEventListener("resize", setSize);
w.addEventListener("pageShow", setSize);
w.addEventListener("DOMContentLoaded", setSize);
})(window, document);

41
page/domestic.html Normal file
View File

@@ -0,0 +1,41 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>分类</title>
<script src="../js/utils/rem.js"></script>
<link rel="stylesheet" href="https://www.jq22.com/demo/jquery.mloading-master201701171922/src/jquery.mloading.css">
<link rel="stylesheet" href="https://unpkg.com/swiper@8.4.7/swiper-bundle.min.css">
<link rel="stylesheet" href="../css/tool/clear.css">
<link rel="stylesheet" href="https://at.alicdn.com/t/c/font_4738996_b8zp7vfi90h.css">
<link rel="stylesheet" href="../css/tool/public.css">
<link rel="stylesheet" href="../css/page/domestic.css">
</head>
<body>
<div class="content">
<ul class="type_list flex p15 ais"></ul>
<div class="swiper type_list_content border-box ">
<div class="swiper-wrapper"></div>
</div>
</div>
</body>
<script src="../js/lib/jquery.min.js"></script>
<script src="https://www.jq22.com/demo/jquery.mloading-master201701171922/src/jquery.mloading.js"></script>
<script src="../js/lib/swiper-bundle.min.js"> </script>
<script src="../js/utils/index.js"></script>
<script src="../js/config/index.js"></script>
<script src="../js/http/index.js"></script>
<script src="../js/serve/tag.js"></script>
<script src="../js/page/domestic.js"></script>
</html>

37
page/hot.html Normal file
View File

@@ -0,0 +1,37 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/utils/rem.js"></script>
<link rel="stylesheet" href="../css/tool/clear.css">
<link rel="stylesheet" href="https://at.alicdn.com/t/c/font_4738996_raea6u0p92.css">
<link rel="stylesheet" href="../css/tool/public.css">
<link rel="stylesheet" href="../css/page/hot.css">
</head>
<body>
<div class="header fixed border-box flex ais js">
</div>
<div class="content">
热门
</div>
</body>
<script src="../js/utils/index.js"></script>
<script src="../js/config/index.js"></script>
<script src="../js/http/index.js"></script>
<script src="../js/serve/home.js"></script>
<script src="../js/serve/info.js"></script>
<script src="../js/page/hot.js"></script>
</html>

67
page/index.html Normal file
View File

@@ -0,0 +1,67 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>首页</title>
<script src="../js/utils/rem.js"></script>
<link rel="stylesheet" href="../css/tool/clear.css">
<link rel="stylesheet" href="https://www.jq22.com/demo/jquery.mloading-master201701171922/src/jquery.mloading.css">
<link rel="stylesheet" href="https://unpkg.com/swiper@8.4.7/swiper-bundle.min.css">
<link rel="stylesheet" href="https://at.alicdn.com/t/c/font_4738996_jw564sk4hpk.css">
<link rel="stylesheet" href="../css/tool/public.css">
<link rel="stylesheet" href="../css/page/index.css">
</head>
<body>
<div class="content">
<div class="swiper banner border-box ">
<div class="swiper-wrapper"></div>
<!-- 如果需要分页器 -->
<div class="swiper-pagination"></div>
</div>
<ul class="recommend-tag flex p25"></ul>
<div class="recommend-model recommend-horizontally">
<div class="title p25 flex ais">推荐写真</div>
<ul class="flex list p15"></ul>
</div>
<div class="recommend-model default-model">
<ul class="flex list p15 js"></ul>
</div>
<!-- <div class="hot p13">
<div class="title flex ais">
<i class="iconfont icon-hot1"></i>
<div class="text">热门标签</div>
</div>
<ul class="flex wrap">
</ul>
</div> -->
</div>
</body>
<script src="../js/lib/jquery.min.js"></script>
<script src="https://www.jq22.com/demo/jquery.mloading-master201701171922/src/jquery.mloading.js"></script>
<script src="../js/lib/swiper-bundle.min.js"> </script>
<script src="../js/config/index.js"></script>
<script src="../js/utils/index.js"></script>
<script src="../js/http/index.js"></script>
<script src="../js/serve/home.js"></script>
<script src="../js/serve/tag.js"></script>
<script src="../js/page/index.js"></script>
</html>

49
page/info.html Normal file
View File

@@ -0,0 +1,49 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/utils/rem.js"></script>
<link rel="stylesheet" href="https://www.jq22.com/demo/jquery.mloading-master201701171922/src/jquery.mloading.css">
<link rel="stylesheet" href="https://at.alicdn.com/t/c/font_4738996_b8zp7vfi90h.css">
<link rel="stylesheet" href="../css/tool/clear.css">
<link rel="stylesheet" href="../css/tool/public.css">
<link rel="stylesheet" href="../css/page/info.css">
</head>
<body>
<div class="content">
<div class="info_img_list relative">
<div class="img_list"></div>
<div class="view_all flex ais jc absolute">
<div>点我展开</div>
<i class="iconfont icon-zhankai-copy"></i>
</div>
</div>
<div class="recommend-model default-model">
<div class="title p25 flex ais">推荐写真</div>
<ul class="flex list p15"></ul>
</div>
</div>
</body>
<script src="../js/lib/jquery.min.js"></script>
<script src="https://www.jq22.com/demo/jquery.mloading-master201701171922/src/jquery.mloading.js"></script>
<script src="../js/utils/index.js"></script>
<script src="../js/config/index.js"></script>
<script src="../js/http/index.js"></script>
<script src="../js/serve/home.js"></script>
<script src="../js/serve/info.js"></script>
<script src="../js/page/info.js"></script>
</html>

36
page/me.html Normal file
View File

@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/utils/rem.js"></script>
<link rel="stylesheet" href="../css/tool/clear.css">
<link rel="stylesheet" href="https://at.alicdn.com/t/c/font_4738996_raea6u0p92.css">
<link rel="stylesheet" href="../css/tool/public.css">
<link rel="stylesheet" href="../css/page/me.css">
</head>
<body>
<div class="header fixed border-box flex ais js">
</div>
<div class="content">
我的
</div>
</body>
<script src="../js/utils/index.js"></script>
<script src="../js/config/index.js"></script>
<script src="../js/http/index.js"></script>
<script src="../js/serve/home.js"></script>
<script src="../js/serve/info.js"></script>
<script src="../js/page/me.js"></script>
</html>

55
page/search.html Normal file
View File

@@ -0,0 +1,55 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/utils/rem.js"></script>
<link rel="stylesheet" href="../css/tool/clear.css">
<link rel="stylesheet" href="https://at.alicdn.com/t/c/font_4738996_l428banw828.css">
<link rel="stylesheet" href="https://www.jq22.com/demo/jquery.mloading-master201701171922/src/jquery.mloading.css">
<link rel="stylesheet" href="../css/tool/public.css">
<link rel="stylesheet" href="../css/page/search.css">
</head>
<body>
<!-- <div class="header fixed border-box flex ais js p15">
<i class="iconfont icon-fanhui"></i>
<input class="flex1" type="text" placeholder="输入关键字">
<div class="button">搜索</div>
</div> -->
<div class="content">
<div class="no-search">
<div class="search_list">
<div class="title flex ais p25">搜索建议</div>
<ul class="flex p15 wrap"></ul>
</div>
<ul class="recommend-model search_recommend p25"></ul>
</div>
<div class="have-search recommend-model default-model" style="display: none;">
<ul class="flex list p15 js"></ul>
</div>
</div>
</body>
<script src="../js/lib/jquery.min.js"></script>
<script src="https://www.jq22.com/demo/jquery.mloading-master201701171922/src/jquery.mloading.js"></script>
<script src="../js/utils/index.js"></script>
<script src="../js/config/index.js"></script>
<script src="../js/http/index.js"></script>
<script src="../js/serve/search.js"></script>
<script src="../js/page/search.js"></script>
</html>

30
page/tagListInfo.html Normal file
View File

@@ -0,0 +1,30 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../js/utils/rem.js"></script>
<link rel="stylesheet" href="../css/tool/clear.css">
<link rel="stylesheet" href="https://at.alicdn.com/t/c/font_4738996_b8zp7vfi90h.css">
<link rel="stylesheet" href="../css/tool/public.css">
<link rel="stylesheet" href="../css/page/tagListInfo.css">
</head>
<body>
<div class="content">
<div class="recommend-model default-model">
<ul class="flex list p15 js"></ul>
</div>
</div>
</body>
<script src="../js/utils/index.js"></script>
<script src="../js/config/index.js"></script>
<script src="../js/http/index.js"></script>
<script src="../js/serve/tag.js"></script>
<script src="../js/page/tagListInfo.js"></script>
</html>