HTML+CSS实训——Day14——项目其他页面的完善

news2024/12/23 9:45:41

仓库地址:HTML实训

前言

今天我们继续用老师提供的api,完善一些剩余的功能,因为我的git push好像传乱了,所以仓库大家看看最新的就好,最新的一天一定包括前一天所做的内容。

Collect.html+css

收藏界面
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  <link rel="stylesheet" href="font-awesome-4.7.0/css/font-awesome.css">
  <link rel="stylesheet" href="./css/collect.css">
  <script>
    document.documentElement.style.fontSize = window.screen.width / 10 + 'px'
  </script>
  <!-- 引入vue文件 -->
  <script src="./js/js/vue.js"></script>
  <title></title>
</head>

<body>
  <div id="app">
    <div class="info">
      <div class="left">
        <img src="img/song/996.jpg" alt="">
        <span>歌单</span>
      </div>
      <div class="count">
        <span class="fa fa-play">114万次</span>
      </div>
      <div class="right">
        <span class="title">
          我喜欢的歌曲
        </span>
        <span class="comment">
          我喜欢的歌曲
        </span>
        <div class="avator">
          <img src="./img/user/default.jpg" alt="">
          <span>GNC顾念辰</span>
        </div>
      </div>
    </div>

    <div class="sheet-list">
      歌曲列表
    </div>

    <!-- <div v-for="(item,i) of collect">
      {{ i+1 }} => {{ item.title }} <button @click="rmCollect(item.sid)">取消收藏</button>
    </div> -->


    <div class="box">
      <div class="item" v-for="(item,i) of collect">
        <div class="seq">{{ i+1 }}</div>
        <div class="info-song">
          <div class="title">{{ item.title }} </div>
        </div>
        <button @click="rmCollect(item.sid)">取消收藏</button>
        <div class="unlike">

        </div>

      </div>

    </div>




    <div class="tab-bar">
      <div class="item active">
        <i class="fa fa-globe" @click="goToFind"></i>
        <span @click="goToFind">发现</span>
      </div>
      <div class="item">
        <i class="fa fa-video-camera"></i>
        <span>视频</span>
      </div>
      <div class="item">
        <i class="fa fa-music" @click="goToWode"></i>
        <span @click="goToWode">我的</span>
      </div>
      <div class="item">
        <i class="fa fa-users"></i>
        <span>云村</span>
      </div>
      <div class="item">
        <i class="fa fa-user" @click="goToUser()"></i>
        <span @click="goToUser()">账号</span>
      </div>
    </div>
  </div>

  <script>
    var vm = new Vue({
      el: "#app",
      data: {
        collect: []
      },
      methods: {
        rmCollect(sid) {
          var uid = localStorage.getItem('uid')
          fetch('http://180.76.143.181:3000/collect/remove?uid=' + uid + '&sid=' + sid)
            .then(res => res.json()).then(res => {
              console.log(res)
              // 刷新页面
              location.reload()
            })
        },
        goToFind: function () {
          window.location.href = "find.html";
        },
        goToUser: function () {
          location.href = './user.html'
        },
        goToWode: function () {
          location.href = './wode.html'
        },
      },
      mounted() {
        var uid = localStorage.getItem('uid')
        fetch('http://180.76.143.181:3000/collect/list?uid=' + uid).then(res => res.json()).then(res => {
          console.log(res)
          this.collect = res.data
        })

      },

    })
  </script>
</body>

</html>
body {
    margin: 0rem;
  }
  
  .info {
    height: 4rem;
    background-color: gray;
    padding-top: .8rem;
    padding-left: .5333rem;
    display: flex;
  }
  
  
  .info .left img {
    width: 3.2rem;
    height: 3.2rem;
  }
  
  .info .left {
    position: relative;
  }
  
  .info .left span {
    position: absolute;
    left: 0;
    top: .2667rem;
    background-color: #b94257;
    color: white;
    width: 1.0667rem;
    height: .6933rem;
    line-height: .6933rem;
  
    border-radius: 0 .3467rem .3467rem 0;
    padding-left: .16rem;
    font-size: .3733rem;
    margin-left: 0rem;
    margin-right: 0rem;
  }
  
  .info .count span {
    position: absolute;
    left: 2.2133rem;
    width: 2.1333rem;
    /* border: .0267rem solid red ; */
    color: white;
    display: inline-block;
    font-size: small;
  }
  
  .info .right {
    margin-left: .2667rem;
    /* border: .0267rem solid red; */
  }
  
  .info .right .title {
    font-size: .4267rem;
    
    /* border: .0267rem solid red; */
  }
  
  .info .right span {
    margin-left: 0rem;
    margin-right: 0rem;
    color: white;
    font-size: .48rem;
  }
  
  .info .right .title {
    display: flex;
    align-items: center;
  
    font-size: .5333rem;
  }
  .info .right .comment {
    display: flex;
    font-size: 12px;
  }
  
  .info .right div{
    position: relative;
    display: flex;
    font-size: .3733rem;
    margin-top: .8rem;
  
    /* border: .0267rem solid red; */
  }
  .info .right img {
    position: absolute;
    width: .8rem;
    height: .8rem;
    border-radius: .5333rem;
    margin-top: 10.0012px;
  }
  
  .info .right div span {
    margin-left: 34.9988px;
    margin-top: 19.9988px;
    font-size: .3733rem;
  
    /* border: .0267rem solid red; */
  }
  .sheet-list {
    top: 2.9333rem;
    background-color: gainsboro;
    font-size: .3733rem;
    color: gray;
    line-height: .8rem;
    padding-left: .2667rem;
  }


  .box .item .seq {

    height: .5333rem;
    width: .1333rem;
    color: black;
    font-size: .5333rem;
  }
  .box{
    margin-top: .16rem;
  }
  .box .item{

    display: flex;
    justify-content: center;
    border-bottom: .0267rem solid gainsboro; 
    padding-bottom: .1333rem;
    margin-bottom: .2667rem;
    margin-top: .2667rem;
  }
  .box .item .unlike button{
    
    border: .0267rem solid black;
    background-color: red;
    color: white;
    border-radius: .08rem;
  }
  .box .item .info-song .title{
    margin-left: .2333rem;

  
  }
  .box .item .info-song{
    width: 5.8667rem;
    
    /* border: .0267rem solid red; */
  }






  .tab-bar {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: white;
    height: 2.1333rem;
    /* border: .0267rem solid red; */
    display: flex;
    justify-content: space-evenly;
  }
  
  .tab-bar>.item {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
  }
  
  .tab-bar>.item>i {
    font-size: .8rem;
  }
  
  .tab-bar>.item>span {
    margin-top: .16rem;
    font-size: .3733rem;
  }
  
  .tab-bar>.active {
    color: red;
  }
  .info-song .title{
    font-size: .4533rem;
  }

add-sheet.html+css

添加歌曲页面
在这里插入图片描述

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
  <link rel="stylesheet" href="font-awesome-4.7.0/css/font-awesome.css">
  <link rel="stylesheet" href="./css/add-sheet.css">
  <script>
    document.documentElement.style.fontSize = window.screen.width / 10 + 'px'
  </script>
  <!-- 引入vue文件 -->
  <script src="./js/js/vue.js"></script>
  <title>添加歌单</title>
</head>

<body>
  <div id="app">
    <div class="top-nav">
			<i class="fa fa-arrow-left" @click="goBack()"></i>
		</div>
    <di class="addedlist">已添加歌曲:{{ sheetSongs }}</di>
    <div class="ps">
      歌单名:<br><input type="text" v-model="title"> <br>
      描述:<br><input type="text" v-model="intro"> <br>
      <button @click="add">添加</button>
    </div>
    <div class="box">
      <div v-for="song of songs">
        <input type="checkbox" v-model="sheetSongs" :value="song.sid"> {{ song.title }}
      </div>
    </div>

  </div>

  <script>
    var vm = new Vue({
      el: "#app",
      data: {
        songs: [],
        sheetSongs: [],
        title: '',
        intro: ''
      },
      mounted() {
        fetch('http://180.76.143.181:3000/song/list')
          .then(res => res.json()).then(res => {
            console.log(res)
            this.songs = res.data
          })
      },
      methods: {
        add() {
          var uid = localStorage.getItem('uid')
          fetch('http://180.76.143.181:3000/sheet/add',
            {
              method: 'POST',
              headers: {
                'Content-Type': 'application/json'
              },
              body: JSON.stringify({
                uid: uid,
                title: this.title,
                intro: this.intro,
                sids: this.sheetSongs.join()
              })
            })
            .then(res => res.json()).then(res => {
              console.log(res)
            })
        },
        goBack: function () {
					history.back()
				},
      },
    })
  </script>
</body>

</html>
body{
    background-color: red;
}
.top-nav{
    display: flex;
    justify-content: space-between;
    margin-left: .2667rem;
    margin-right: .2667rem;
    margin-top: .2667rem;


}

.top-nav>.fa{  
    font-size: .6933rem;
    color: white;

}
.addedlist {
    font-size: 20px;
    color: white;
}

.ps {
    color: white;
    font-size: 20px;
    text-align: center;

}
.ps input {
    width: 7.2rem;
    height: 20px;
    border: none;
    margin-bottom: .16rem;
    /* 清除轮廓 */
    outline: none;
}
button {
    width: 7.2rem;
    height: 20px;
    border: none;
    margin-bottom: .16rem;
    /* 清除轮廓 */
    outline: none;
}
.box div{
    margin-top: 10px;
    margin-left: 30px;
    font-size: 20px;
    color: white;
}

还有几个页面,我就不一一展示了,大家去我的仓库直接下载就可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/644989.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dijkstra迪杰斯特拉算法求最短路径(C++实现)

名人说&#xff1a;一花独放不是春&#xff0c;百花齐放花满园。——《增广贤文》 作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 〇、Dijkstra迪杰斯特拉算法介绍1、Dijkstra算法是什么&#xff1f;2、Dijkstra算法…

低代码工具:jvs-list(列表引擎)2.1.7功能清单及新增功能介绍

在低代码开发平台中&#xff0c;列表页是一个用于显示数据列表的页面。它通常用于展示数据库中的多条记录&#xff0c;并提供搜索、排序和筛选等功能&#xff0c;以方便用户对数据进行查找和浏览。 jvs-list是jvs快速开发平台的列表页的配置引擎&#xff0c;它和普通的crud 具…

Rocky Linux9.的系统中安装MySQL8 实战

前言 Centos7 已经停止维护&#xff0c;学习其他linux系统势在必行&#xff0c;今天我们要探讨的是&#xff1a; 在Rocky linux9的系统上安装MySQL8 文章目录 前言1. 从Appstream中进行安装1.1 更新系统中的所有软件包1.2 安装MySQL1.3 启动并测试1.4 查看MySQL版本 2. 初始化操…

获取地理位置请求免费天气接口

需求&#xff1a;根据地理位置信息去请求免费的天气接口数据&#xff0c;拿到数据后进行展示&#xff0c;这边我用到了俩个key&#xff0c;一个是高德天气的key和心知天气的key&#xff0c;为什么要这么麻烦呢&#xff0c;是因为之前写过一版不需要获取地理位置&#xff0c;直接…

嵌入式系统开发中的常见挑战和困难

当涉及嵌入式系统开发时&#xff0c;可能会遇到以下一些常见的挑战和困难&#xff1a; 复杂的硬件和软件集成&#xff1a;嵌入式系统通常涉及硬件和软件的紧密集成&#xff0c;需要同时理解和处理硬件和软件层面的问题。这种复杂性可能导致调试和故障排除变得更加困难。 有限…

【哈佛积极心理学笔记】第19讲 让爱情天长地久

第19讲 让爱情天长地久 What makes relationship thrive, some characteristic: work hard the fix mindset: “you are so smart, you are so intelligent” the malleable mindset: “you work so hard” Finding mindset: “finding the right partner” (fix) some thin…

PLC领域从业者的工作待遇现状如何?

目前从事可编程逻辑控制器&#xff08;PLC&#xff09;领域的人员在工作待遇方面相对较好。PLC是工业自动化中广泛使用的控制设备&#xff0c;用于监控和控制各种工业过程和机械设备。以下是关于从事PLC的人员工作待遇的一些常见情况和趋势&#xff1a; 薪资水平&#xff1a;P…

【算法与数据结构】242、LeetCode有效的字母异位词

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;题目要求判断两个字符串是否为字母异位词。什么是字母异位词呢&#xff1f;顾名思义&#xff0c;就是字…

深入理解相机硬件抽象层

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、概览二、Camera HIDL 接口三 、Camera Provider 主程序四、Camera HAL3 接口 一、概览 始于谷歌的Treble开源项目&#xff0c;基于接口与实现的分离…

【AUTOSAR】UDS协议的代码分析与解读(二)----ECU诊断协议概述

UDSO诊断服务技术规范 1 范围 本规范规定了增强型诊断需求的诊断服务部分的内容&#xff0c;定义了通用电子系统需遵循的UDS通用执行 规则。 本规范适用于集团x事业部所有平台车型&#xff0c;所有电子控 制单元(ECU) 的诊断需求&#xff0c;均需按此规范执行。 本规范定义的…

Python神经网络编程学习笔记

文章目录 神经网络基本原理线性分类器学习率一个线性分类器的局限性逻辑AND、逻辑OR逻辑XOR 神经元sigmoid function的logistic function(逻辑函数) 多层神经元演示只有两层&#xff0c;每层两个神经元的神经网络的工作矩阵大法(点乘)使用矩阵乘法的三层神经网络示例反向传播误…

AJAX概述

1.1什么是AJAX. Ajax即AsynchronousJavascript And XML&#xff1a;异步数据回调。 使用Ajax技术网页应用能够快速地将更新呈现在用户界面上&#xff0c;不需要重载&#xff08;刷新&#xff09;整个页面【只刷新局部】&#xff0c;这使得程序能够更快地回应用户的操作。、 1…

H5U PLC EtherCAT总线伺服回原(6098H=3)

回原方式35请参看下面文章 汇川H5U PLC通过 EtherCAT总线控制伺服回原_RXXW_Dor的博客-CSDN博客大部分运动控制都会对机械回原点进行大篇幅讲解,也可以看出机械回原点的重要性。常规的回原点方式大概有几十种吧,本文会给出常用回原点的注意事项,和编程推荐写法。如果原点回…

二层和三层交换机到底有啥区别?二者如何切换?

概要 计算机网络中的交换机是用于在局域网&#xff08;LAN&#xff09;中转发数据包的重要设备。其中&#xff0c;二层交换机和三层交换机是两种常见的交换机类型。本文将详细介绍二层交换机和三层交换机的特点、工作原理、各自的优缺点以及在思科、华为、瞻博网络三家厂商如何…

互联网架构师联合总结的 Java 面试攻略,GitHub 标星 30K!

2023 年的互联网行业竞争越来越严峻&#xff0c;面试也是越来越难&#xff0c;一直以来我都想整理一套完美的面试宝典&#xff0c;奈何难抽出时间&#xff0c;这套 1000道的 Java 面试手册是行业内各大神联合总结出来的&#xff0c;上传到 Git 上目前 star 数达到了 30K 这套互…

金九银十Java面试八股文汇总(2023最新整理)

前言 这才刚刚进入 6 月&#xff0c;我就看到了许多朋友在焦急的准备“金九银十”跳槽面试&#xff0c;甚至很多即将毕业的大学生都在备战秋招&#xff0c;对于学历还算优秀的大学生来说&#xff0c;这是一次离大厂最近的机会&#xff0c;毕竟是应届毕业生&#xff0c;不会对技…

LatticeXP2深力科 LFXP2-8E-6TN144I 灵活的flexiFLASH架构 应用笔记介绍

LatticeXP2深力科 LFXP2-8E-6TN144I 是一款瞬时上电、安全、小尺寸的FPGA&#xff0c;具有多功能的开发平台,采用flexiFLASH™架构&#xff0c;结合了一个基于FPGA基本结构的 4输入查找表&#xff08;LUT&#xff09;以及用于设计数据片上存储的闪存非易失性单元。flexiFLASH架…

Triton教程 -- 利用Triton部署你自己的模型

Triton教程—利用Triton部署你自己的模型 给定一个经过训练的模型&#xff0c;我如何使用 Triton 推理服务器以最佳配置大规模部署它&#xff1f; 本文档旨在帮助回答这个问题。 对于那些喜欢高级概述的人&#xff0c;下面是大多数用例的通用流程。 对于那些希望直接进入的人…

ceph分布式存储实战

ceph分布式存储实战 分布式存储系统简介 性能与优势对比 虚拟机安装ceph集群 ceph存储系统简介 分布式存储概述 ceph基础 高可用ceph分布式存储系统部署 部署ceph集群 节点管理 ceph使用基础及数据存储案例 PG状态、数据读写流程及存储池操作 mon服务器的高可用: # apt in…

天线设计中的磁介质材料 探索可重构潜力

​from&#xff1a;IEEE Antennas & Propagation Magazine (Vol. 61 / No. 1 / Feb. 2019, pp:29-40) -- 文 前 -- 这篇文章针对铁氧体在外置磁场下磁导率发生变化这个特点&#xff0c;探讨铁氧体在可重构天线中的应用。文中对铁氧体材料的选择&#xff0c;磁导率数学模型…