歌手详情页

文章讲述了如何封装一个名为music-list的组件,包括设置back键、图片层、标题和滚动列表。在singer-detail中引用并注册组件,通过计算属性处理数据,传入模板中。同时,实现了图片高度的动态获取,加载效果的控制,以及列表上下拉的滚动效果。在滚动事件中,通过实时获取滚动位置调整背景图片层级和模糊效果,同时处理了iOS的兼容问题。
摘要由CSDN通过智能技术生成

封装music-list组件

back返回键、bg-image图片层、title标题、song-list可滚动列表另封装

应用music-list组件

在singer-detail中引用,注册

    import MusicList from '@/components/music-list/music-list'
      components: { MusicList},

定义data放置

data() {
        return {
          songs: []
        }
      }

用计算属性拿到title和pic

computed: {
        pic () {
          return this.singer && this.singer.pic
        },
        title () {
          return this.singer && this.singer.name
        }
      },

传入模板中

	  <music-list
        :songs="songs"
        :title="title"
        :pic="pic"
      ></music-list>

设置图片高度

定义一个变量 图片高度初始0

data() {
        return {
          imageHeight: 0,
        }
      },

1.在dom元素绑定raf 用mounted拿到高度
2.设置一个动态style,定义scrollStyle,top值跟imageHeight一样

<div
        class="bg-image"
        :style="bgImageStyle"
        ref="bgImage"
      >
computed: {
        bgImageStyle() {
          return {
            backgroundImage: `url(${this.pic})`
          }
        },
        scrollStyle() {
          return {
            top: `${this.imageHeight}px`
          }
        }
      },
mounted() {
        this.imageHeight = this.$refs.bgImage.clientHeight
      },

加载效果

数据是异步获取的,在singer-detail中loading默认值为true,加载完变为flase,再传递给music-list

data() {
        return {
          songs: [],
          loading: true
        }
      },
async created() {
        const result = await getSingerDetail(this.computedSinger)
        this.songs = await processSongs(result.songs)
        this.loading = flase
      }

列表上下拉效果

实时获取滚动位置 监听滚动事件

:probe-type="3"
@scroll="onScroll"

定义scrollY:滚动的距离,在onScroll赋值

 onScroll(pos) {
          this.scrollY = -pos.y
        },

修改层级
1.定义常量

const RESERVED_HEIGHT = 40

2.定义变量:最大可滚动距离

maxTranslateY: 0
this.maxTranslateY = this.imageHeight - RESERVED_HEIGHT

(1)获取scrrolly,通过zIndex控制,如果滚动超过距离,提升层级
(2)设定宽高默认,动态改变
(3)translateZ解决ios兼容问题

bgImageStyle() {
          const scrollY = this.scrollY
          let zIndex = 0
          let paddingTop = '70%'
          let height = 0
          let translateZ = 0
  
          if (scrollY > this.maxTranslateY) {
            zIndex = 10
            paddingTop = 0
            height = `${RESERVED_HEIGHT}px`
            translateZ = 1
          }
  
          let scale = 1
          if (scrollY < 0) {
            scale = 1 + Math.abs(scrollY / this.imageHeight)
          }
  
          return {
            zIndex,
            paddingTop,
            height,
            backgroundImage: `url(${this.pic})`,
            transform: `scale(${scale})translateZ(${translateZ}px)`
          }
        },

模糊效果

css属性:backdrop-filter
监听scrollY变化,动态改变filter的style
1.默认不模糊
2.获取滚动距离,高度
3.判断,不能超过最大值
4.赋值

filterStyle() {
          let blur = 0
          const scrollY = this.scrollY
          const imageHeight = this.imageHeight
          if (scrollY >= 0) {
            blur = Math.min(this.maxTranslateY / imageHeight, scrollY / imageHeight) * 20
          }
          return {
            backdropFilter: `blur(${blur}px)`
          }
        },

刷新

将数据保存在本地,刷新之后也能直接用
good storage本地存储第三方库

在Python中,爬取QQ音乐歌手信息通常会涉及到网络爬虫技术,使用如requests库获取网页内容,然后解析HTML数据,常常借助BeautifulSoup、Scrapy等库。下面是一个简化的步骤: 1. **安装必要的库**: 首先需要安装`requests`, `lxml`或`beautifulsoup4`以及可能用于处理JavaScript的库如`selenium`(如果目标网站有动态加载的内容)。 ```bash pip install requests beautifulsoup4 ``` 2. **发送HTTP请求**: 使用requests.get()获取歌手详情页的HTML源码。 ```python import requests url = "https://y.qq.com/n/yqq/singer/qmdetail.htm" response = requests.get(url) ``` 3. **解析HTML**: 使用BeautifulSoup解析返回的HTML,查找包含歌手信息的标签。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'lxml') singer_info = soup.find('div', {'class': 'artist-info'}) ``` 4. **提取歌手信息**: 提取歌手名称、简介或其他想要的信息,这可能涉及CSS选择器或XPath。 ```python name = singer_info.find('h1').text introduction = singer_info.find('p', {'class': 'artist-intro'}).text ``` 5. **处理异常**: 确保捕获并处理可能出现的网络错误或解析错误。 6. **存储数据**: 将爬取的数据保存到文件或数据库中,具体取决于你的需求。 注意,实际操作时可能需要处理反爬策略,例如IP限制、验证码等,也可能因为网站结构变化导致解析失败。另外,在爬取网站信息时,请尊重版权法律,并遵守网站的robots.txt协议。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值