• 【VUE】vue程序设计----模仿网易严选


    1、引言

    设计结课作业,课程设计无处下手,网页要求的总数量太多?没有合适的模板?数据库,java,python,vue,html作业复杂工程量过大?毕设毫无头绪等等一系列问题。你想要解决的问题,在微信公众号“coding加油站”中全部会得到解决

    2、作品介绍

    网易严选系统采用html,css,vue技术来实现,符合所学知识体系,适用于常见的作业以及课程设计,需要获取更多的作品,请关注微信公众号:coding加油站,获取,如需更多资料,可在微信后台留言。欢迎大家来提问,交流学习。

    2.1、作品简介方面 

    网易严选系统采用常规方式来实现,符合绝大部分的要求。代码配置有相关文档讲解,如需从代码中学到知识点,那么这个作品将是你的不二之选

    2.2、作品二次开发工具

    此作品代码相对简单,基本使用课堂中所学知识点来完成,只需要修改相关的介绍文字,一些图片,就可以改为自己独一无二的代码,网页作品下载后可使用任意编辑软件(例如:DW、HBuilder、NotePAD 、Vscode 、Sublime 、Webstorm 所有编辑器均可使用)。

    2.3、作品技术介绍

    html网页作品技术方面:使用CSS制作了网页背景图、鼠标经过及选中导航变色效果、下划线等相关技术来美化相关界面,部分采用了javascript来做校验。 使用html5,以及css3等相关技术完成技术的布局,在本作品中,会使用常见的布局,常见的浮动布局,flex布局都会有使用到哦。同时在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识,同时使用了一些js的相关知识。例如使用到了dom,和bom来获取浏览器的相关api,同时使用css对样式进行相关的美化,使得界面更加符合网页设计

    vue作品技术方面:使用vue技术开发的网站,涉及常见的vue指令,如v-for,v-if,v-show,v-html等的使用,包含watch,计算属性等常见功能的开发,以及组件的使用,使用vue相关全家桶的使用,运用了v-router来作为路由,完全符合常见的网站开发技术。同时也会使用html5,以及css3等相关技术完成技术的布局,在本作品中,会使用常见的布局,常见的浮动布局,flex布局都会有使用到哦。

    3、作品演示

    【coding加油站】vue程序设计---模仿网易严选

    3.1、首页

    相关代码:

    1. <div class="wrap" :style="!Mister?'background-image:url(https://yanxuan-static.nosdn.127.net/hxm/yanxuan-node-wap/style/img/skeleton/index-bad8841212914b21f136.png)':''" >
    2. <div class="mask" v-show="big_channel" @click="mask_qiehuan">div>
    3. <div class="top">
    4. <Top>
    5. <a slot="logo" href="" class="logo">
    6. a>
    7. <a slot="login" href="" class="login">登录a>
    8. Top>
    9. <div class="category">
    10. <ul v-show="short_channel">
    11. <li :class="active==index?'on':''" v-for="(item,index) in categorys" :key="index" v-show="index<4"><a href="" @click.prevent="select(index,item)" >{{item}}a>li>
    12. ul>
    13. <div class="all_cate" v-show="big_channel">
    14. <p>全部频道p>
    15. <div class="short_cate">
    16. <span @click="qiehuan(index,item)" :class="index==on?'on':''" v-for="(item,index) in big_categorys" :key="index" >{{item}}span>
    17. div>
    18. div>
    19. <span @click="show_channel" class="iconfont arr" :class="short_channel?'icon-xiangxiajiantou':'icon-xiangxiajiantou-copy'"> span>
    20. div>
    21. div>
    22. <section >
    23. <div class="swiper-container">
    24. <div class="swiper-wrapper">
    25. <div class="swiper-slide" v-for="(item,index) in lunbo" :key="index">
    26. <img :src="item" alt="">
    27. div>
    28. div>
    29. <div class="swiper-pagination">div>
    30. div>
    31. <div class="title">
    32. <div v-for="(item,index) in title" :key="index"><img :src="item.icon" alt=""><span>{{item.name}}span>div>
    33. div>
    34. <ul class="classify" v-if="Mister.kingKongModule">
    35. <li v-for="(item,index) in Mister.kingKongModule.kingKongList" :key="index" ><img :src="item.picUrl" alt=""><span class="">{{item.text}}span>li>
    36. ul>
    37. <div class="new_person">
    38. <img src="https://yanxuan.nosdn.127.net/0f256e29c06d1954a6785b16ec7d3624.gif?imageView&quality=75" alt="">
    39. div>
    40. <div class="tuijian">
    41. <div class="img">
    42. <img v-lazy="'https://yanxuan.nosdn.127.net/2ce893ef19956ddd2413d87a24e9b2e4.png?quality=75&type=webp&imageView&thumbnail=375x0'" alt="">
    43. <img v-lazy="'https://yanxuan.nosdn.127.net/9afb2a9449c66f348bf3fa4c3deda38f.png?quality=75&type=webp&imageView&thumbnail=375x0'" alt="">
    44. div>
    45. <a href="">
    46. <img v-lazy="'https://yanxuan.nosdn.127.net/8346ccd16467d54491ee969769bcb21e.png?quality=75&type=webp&imageView&thumbnail=750x0'" alt="">
    47. a>
    48. div>
    49. <div class="leimu">
    50. <h1>类目销量榜h1>
    51. <div class="paihang">
    52. <div class="left">
    53. <div class="text " >热销榜div>
    54. <img v-lazy="'https://yanxuan-item.nosdn.127.net/c40842640f6a1a2509960c2029aca1b8.png?quality=75&type=webp&imageView&thumbnail=200x200'" alt="">
    55. div>
    56. <div class="right">
    57. <div class="text good">好评榜div>
    58. <img v-lazy="'https://yanxuan-item.nosdn.127.net/c40842640f6a1a2509960c2029aca1b8.png?quality=75&type=webp&imageView&thumbnail=200x200'" alt="">
    59. div>
    60. div>
    61. <div class="short_paihang" v-if="Mister.categoryHotSellModule">
    62. <div class="item" v-show="index>=2" v-for="(item,index) in Mister.categoryHotSellModule.categoryList" :key="index" @click="GoonItem(item)">
    63. <p>{{item.categoryName}}p>
    64. <img v-lazy="item.picUrl" alt="">
    65. div>
    66. div>
    67. div>
    68. <div class="sale">
    69. <div class="tops">
    70. <div class="buy" v-html="isTime">
    71. div>
    72. <a @click.prevent="$router.replace('/flashsale')" href="" class="more">更多 >a>
    73. div>
    74. <ul class="bottom" v-if="Mister.flashSaleModule">
    75. <li @click="$router.push('/flashsale')" v-for="(item,index) in Mister.flashSaleModule.itemList" :key="index">
    76. <img v-lazy="item.picUrl" alt="">
    77. <p>
    78. <span>¥{{item.activityPrice}}span>
    79. <del>¥{{item.originPrice}}del>
    80. p>
    81. li>
    82. <li>li>
    83. <li>li>
    84. ul>
    85. div>
    86. <div class="new_shop">
    87. <div class="new_top">
    88. <h2>新品首发h2>
    89. <a @click.prevent="$router.replace('/new')" href="" class="more">更多 >a>
    90. div>
    91. <ul class="new_shops">
    92. <li @click="toBuy(item.id)" v-show="index<6" v-for="(item,index) in Mister.newItemList" :key="index">
    93. <img v-lazy="item.primaryPicUrl" alt="">
    94. <div class="names">
    95. {{item.name}}
    96. div>
    97. <div class="prices">
    98. ¥{{item.retailPrice}}
    99. div>
    100. <div class="huodon" v-if="item.promTag">
    101. <span>{{item.promTag}}span>
    102. div>
    103. li>
    104. ul>
    105. div>
    106. section>
    107. div>

    3.2、分类页

     相关代码:

    1. <template>
    2. <div class="wrap">
    3. <Top width="95%">Top>
    4. <section>
    5. <div class="left">
    6. <ul class="left_scroll">
    7. <li @click="TabAlter(item.id,index)" :class="active===index?'active':''" v-for="(item,index) in categoryL1List" :key="index">{{item.name}}li>
    8. ul>
    9. div>
    10. <div class="right">
    11. <keep-alive>
    12. <Right :categoryGroupLis="categoryGroupLis"
    13. :isShowConten="currentCategory.bannerList"
    14. :categoryGroupList="categoryGroupLis"
    15. />
    16. keep-alive>
    17. div>
    18. section>
    19. div>
    20. template>
    21. <script>
    22. import Right from './Category_right/Right'
    23. import {mapState} from 'vuex'
    24. import Top from '../../pages/Top/Top'
    25. export default {
    26. data(){
    27. return {
    28. active:-1,
    29. }
    30. }
    31. ,
    32. mounted(){
    33. // 异步请求地址
    34. this.TabAlter(11,0)
    35. }
    36. ,
    37. methods:{
    38. TabAlter(id,index){
    39. if(index==this.active)return
    40. this.active=index
    41. this.$store.dispatch("GETCATEGORY",id)
    42. }
    43. }
    44. ,
    45. computed:{
    46. ...mapState({
    47. categoryGroupLis:state=>state.Category.categoryGroupLis,
    48. categoryL1List:state=>state.Category.categoryL1List,
    49. currentCategory:state=>state.Category.currentCategory,
    50. // categoryGroupLis:state=>state.Category.categoryGroupLis
    51. })
    52. }
    53. ,
    54. components:{
    55. Top,
    56. Right
    57. }
    58. }
    59. script>

    3.3、详情页

     相关代码:

    1. <template>
    2. <div class="wrap">
    3. <Header>Header>
    4. <div class="header">
    5. <div class="intros">
    6. <div class="title">
    7. <img src="http://yanxuan.nosdn.127.net/0b7676e645253f84be662aacfc051922.png" alt="">
    8. <span>严选好物 用心生活span>
    9. div>
    10. <img class="bg" src="http://yanxuan.nosdn.127.net/a93a392fb8006ba26dea38477979b7b4.jpg?imageView" alt="">
    11. div>
    12. <div class="container">
    13. <div class="banner" ref="banner">
    14. <ul class="swipers" v-for="(item,index) in category" :key="index">
    15. <li v-for="(items,indexs) in item" :key="indexs">
    16. <img :src="items.picUrl" alt="">
    17. <p>{{items.mainTitle}}p>
    18. <span>{{items.viceTitle}}span>
    19. li>
    20. ul>
    21. div>
    22. <div class="xianshitiao">
    23. <span class="ospan">span>
    24. div>
    25. div>
    26. div>
    27. <section>
    28. <ul class="content" v-if="DeserveBuy[0] && DeserveBuy[1]" >
    29. <li v-for="(item,index) in DeserveBuy" :key="index">
    30. <div @click="$router.replace('/deserveContent/'+items.topicId)" class="all_show" v-for="(items,indexs) in item" :key="indexs">
    31. <img v-lazy="items.picUrl" alt="">
    32. <div class="intro" v-if="items.nickname">
    33. {{items.title}}
    34. div>
    35. <div class="person" v-if="items.nickname">
    36. <div class="name" >
    37. <img v-lazy="items.avatar" alt="">
    38. {{items.nickname}}
    39. div>
    40. <div class="numbers">
    41. <img v-lazy="'https://yanxuan.nosdn.127.net/5097bc5f2e1eb15f2a32b56895db073a.png'" alt=""><span>83kspan>
    42. div>
    43. div>
    44. <div class="shows" v-else>
    45. <h1>{{items.title}}h1>
    46. <h3>{{items.subTitle}}h3>
    47. div>
    48. div>
    49. li>
    50. ul>
    51. section>
    52. div>
    53. template>
    54. <script>
    55. import {mapState} from 'vuex'
    56. import BetterScroll from 'better-scroll'
    57. import Header from '../../pages/Header/Header'
    58. export default {
    59. data(){
    60. return {
    61. page:1,
    62. isZhixing:false,
    63. }
    64. },
    65. components:{
    66. Header
    67. },
    68. computed:{
    69. ...mapState({
    70. category:state=>state.Deserve.category,
    71. DeserveBuy:state=>state.Deserve.DeserveBuy
    72. })
    73. }
    74. ,
    75. mounted(){
    76. // 获取导航信息
    77. this.$store.dispatch("GETDESERVECATE")
    78. // 请求默认数据
    79. this.$store.dispatch("GETDETAILS",{page:this.page,size:2})
    80. },
    81. watch:{
    82. category(){
    83. this.$nextTick(()=>{
    84. let banner=this.$refs.banner
    85. let oul=banner.querySelectorAll("ul")
    86. let oul_width=oul[0].offsetWidth
    87. banner.style.width=(oul_width)+"px"
    88. // 滑动
    89. console.log(oul_width)
    90. let ospan=document.querySelector(".ospan")
    91. this.scroll= new BetterScroll(".container",{
    92. scrollX:true,
    93. click:true,
    94. momentum:true
    95. })
    96. // 获取下方滚动条
    97. this.scroll.on("scrollEnd",(e)=>{
    98. let distance=Math.abs(e.x)
    99. if(distance>=300){
    100. ospan.style.width="100%"
    101. }else {
    102. ospan.style.width="50%"
    103. }
    104. })
    105. })
    106. }
    107. ,
    108. DeserveBuy(){
    109. this.$nextTick(()=>{
    110. this.ajaxDeserve()
    111. })
    112. }
    113. },
    114. methods:{
    115. ajaxDeserve(){
    116. console.log(9998)
    117. let content=document.querySelector(".content")
    118. // 滚动
    119. let page=1;
    120. let documents=document.documentElement || document.body
    121. window.addEventListener("scroll",()=>{
    122. if(documents.scrollHeight==documents.scrollTop+documents.clientHeight){
    123. if(!this.isZhixing){
    124. this.page++
    125. this.$store.dispatch("GETDETAILS",{page:this.page,size:2})
    126. console.log(this.page)
    127. this.isZhixing=true
    128. }
    129. window.setTimeout(()=>{
    130. console.log(225)
    131. this.isZhixing=false
    132. },1000)
    133. }
    134. },false)
    135. }
    136. },
    137. beforeDestroy(){
    138. window.location.reload()
    139. }
    140. }
    141. script>

    4、代码结构图

    总结

    以上就是本次项目的全部内容,需要交流或者免费获取代码请关注微信公众号:coding加油站,获取

  • 相关阅读:
    N皇后问题详解
    设计模式-外观模式
    基于51单片机的出租车计价器proteus仿真原理图PCB
    阿里P8熬了一个月肝出这份32W字Java面试手册,传到Git上目前star数达到了30K+
    制作自定义版本 kernel 镜像
    NLP 类问题建模方案探索实践
    达梦数据库运维手册-个人笔记
    如何有效取代FTP来帮助企业快速传输大文件
    LeetCode_Array_1004. Max Consecutive Ones III 最大连续1的个数 III【滑动数组】【Java】【中等】
    Jvm与DVM与ART
  • 原文地址:https://blog.csdn.net/pandas23/article/details/126611639