国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar

這篇具有很好參考價(jià)值的文章主要介紹了【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

SwiftUI模塊系列 - 已更新60篇
SwiftUI項(xiàng)目 - 已更新5個(gè)項(xiàng)目
往期Demo源碼下載

技術(shù):SwiftUI、SwiftUI4.0、Instagram、Firebase
運(yùn)行環(huán)境:
SwiftUI4.0 + Xcode14 + MacOS12.6 + iPhone Simulator iPhone 14 Pro Max

概述

使用SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar - 效果

詳細(xì)

一、運(yùn)行效果

【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram

二、項(xiàng)目結(jié)構(gòu)圖

【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram

三、程序?qū)崿F(xiàn) - 過程

思路:
1.創(chuàng)建頭部模塊 進(jìn)行測試上下滾動(dòng)擁有放大縮小效果
2.搭建分類模塊 固定在頭部下面
3.搭建列表模塊
4.監(jiān)聽滾動(dòng)偏移的操作

1.創(chuàng)建一個(gè)項(xiàng)目命名為 SpotifyResponvieUI

【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram
【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram

1.1.引入資源文件和顏色

顏色
BG #281A1A
Green #4DD037
隨機(jī)圖片9張
個(gè)人大圖背景1張
logo1張

【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram

2. 創(chuàng)建一個(gè)虛擬文件New Group 命名為 View

【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram
【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram

3. 創(chuàng)建一個(gè)虛擬文件New Group 命名為 Model

【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram
【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram

4. 創(chuàng)建一個(gè)文件New File 選擇SwiftUI View類型 命名為Album 并且繼承Identifiable

【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram
【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram

【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram

5. 創(chuàng)建一個(gè)文件New File 選擇SwiftUI View類型 命名為Home

主要是:

【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram
【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram
【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram

【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram

6. 創(chuàng)建一個(gè)文件New File 選擇SwiftUI View類型 命名為OffsetModifier

【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram
【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram
【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar,# SwiftUI項(xiàng)目+Firebase,# SwiftUI項(xiàng)目,swiftui,ios,swift,Firebase,Instagram

Code

ContentView - 主窗口

主要是展示主窗口Home和設(shè)置暗黑模式

import SwiftUI

struct ContentView: View {
    var body: some View {
        Home()
        // 永遠(yuǎn)是黑暗模式
            .preferredColorScheme(.dark)
    }
    
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
Home - 主頁

思路

  1. 主要就是展示大圖背景 + 固定的分類 + 列表模塊
//
//  Home.swift
//  SpotifyResponvieUI (iOS)
//
//  Created by lyh on 2022/8/23.
//

import SwiftUI

struct Home: View {
    @State var currentType: String = "Popular"
    // 光滑滑動(dòng)效果
    @Namespace var animation
    @State var _albums: [Album] = albums
    
    // x,y
    @State var headerOffsets: (CGFloat,CGFloat) = (0,0)
    
    var body: some View {
        ScrollView(.vertical, showsIndicators: false) {
            VStack(spacing: 0){
                HeaderView()
                // 帶內(nèi)容的固定標(biāo)題
                LazyVStack(pinnedViews: [.sectionHeaders]) {
                    Section {
                        SongList()
                    } header: {
                        PinnedHeaderView()
                            .background(Color.black)
                            .offset(y: headerOffsets.1 > 0 ? 0 : -headerOffsets.1 / 8)
                            .modifier(OffsetModifier(offset: $headerOffsets.0, returnFromStart: false))
                            .modifier(OffsetModifier(offset: $headerOffsets.1))
                    }
                }
            }
        }
        .overlay(content: {
            Rectangle()
                .fill(.black)
                .frame(height: 50)
                .frame(maxHeight: .infinity,alignment: .top)
                .opacity(headerOffsets.0 < 5 ? 1 : 0)
        })
        .coordinateSpace(name: "SCROLL")
        .ignoresSafeArea(.container, edges: .vertical)
    }
    
    // 固定的內(nèi)容
    @ViewBuilder
    func SongList()->some View{
        VStack(spacing: 25){
            ForEach($_albums){$album in
                
                HStack(spacing: 12){
                    
                    Text("#\(getIndex(album: album) + 1)")
                        .fontWeight(.semibold)
                        .foregroundColor(.gray)
                    
                    Image(album.albumImage)
                        .resizable()
                        .aspectRatio(contentMode: .fill)
                        .frame(width: 55, height: 55)
                        .clipShape(RoundedRectangle(cornerRadius: 10, style: .continuous))
                    
                    VStack(alignment: .leading, spacing: 8) {
                        Text(album.albumName)
                            .fontWeight(.semibold)
                        
                        Label {
                            Text("65,587,909")
                        } icon: {
                            Image(systemName: "beats.headphones")
                                .foregroundColor(.white)
                        }
                        .foregroundColor(.gray)
                        .font(.caption)
                    }
                    .frame(maxWidth: .infinity,alignment: .leading)
                    
                    Button {
                        album.isLiked.toggle()
                    } label: {
                     
                        Image(systemName: album.isLiked ? "suit.heart.fill" : "suit.heart")
                            .font(.title3)
                            .foregroundColor(album.isLiked ? Color("Green") : .white)
                    }
                    
                    Button {
                    } label: {
                     
                        Image(systemName: "ellipsis")
                            .font(.title3)
                            .foregroundColor(.white)
                    }
                }
            }
        }
        .padding()
        .padding(.top,25)
        .padding(.bottom,150)
    }
    
    func getIndex(album: Album)->Int{
        return _albums.firstIndex { currentAlbum in
            return album.id == currentAlbum.id
        } ?? 0
    }
    
    // 頭部視圖
    @ViewBuilder
    func HeaderView()->some View{
        GeometryReader{proxy in
            let minY = proxy.frame(in: .named("SCROLL")).minY
            let size = proxy.size
            let height = (size.height + minY)
            
            Image("Ariana")
                .resizable()
                .aspectRatio(contentMode: .fill)
                .frame(width: size.width,height: height > 0 ? height : 0,alignment: .top)
                .overlay(content: {
                    ZStack(alignment: .bottom) {
                        
                        // 調(diào)暗文本內(nèi)容
                        LinearGradient(colors: [
                            .clear,
                            .black.opacity(0.8)
                        ], startPoint: .top, endPoint: .bottom)
                        
                        VStack(alignment: .leading, spacing: 12) {
                            
                            Text("宇夜iOS")
                                .font(.callout)
                                .foregroundColor(.gray)
                            
                            HStack(alignment: .bottom, spacing: 10) {
                                Text("Ariana Grande")
                                    .font(.title.bold())
                                
                                Image(systemName: "checkmark.seal.fill")
                                    .foregroundColor(.blue)
                                    .background{
                                        Circle()
                                            .fill(.white)
                                            .padding(3)
                                    }
                            }
                            
                            Label {
                             
                                Text("Monthly Listeners")
                                    .fontWeight(.semibold)
                                    .foregroundColor(.white.opacity(0.7))
                            } icon: {
                                Text("62,354,659")
                                    .fontWeight(.semibold)
                            }
                            .font(.caption)
                        }
                        .padding(.horizontal)
                        .padding(.bottom,25)
                        .frame(maxWidth: .infinity,alignment: .leading)
                    }
                })
                .cornerRadius(15)
                .offset(y: -minY)
        }
        .frame(height: 250)
    }
    
    // 固定在頭部
    @ViewBuilder
    func PinnedHeaderView()->some View{
        let types: [String] = ["Popular","Albums","Songs","Fans also like","About"]
        ScrollView(.horizontal, showsIndicators: false) {
            HStack(spacing: 25){
                
                ForEach(types,id: \.self){type in
                    VStack(spacing: 12){
                        
                        Text(type)
                            .fontWeight(.semibold)
                            .foregroundColor(currentType == type ? .white : .gray)
                        
                        ZStack{
                            if currentType == type{
                                RoundedRectangle(cornerRadius: 4, style: .continuous)
                                    .fill(.white)
                                    .matchedGeometryEffect(id: "TAB", in: animation)
                            }
                            else{
                                RoundedRectangle(cornerRadius: 4, style: .continuous)
                                    .fill(.clear)
                            }
                        }
                        .padding(.horizontal,8)
                        .frame(height: 4)
                    }
                    .contentShape(Rectangle())
                    .onTapGesture {
                        withAnimation(.easeInOut){
                            currentType = type
                        }
                    }
                }
            }
            .padding(.horizontal)
            .padding(.top,25)
            .padding(.bottom,5)
        }
    }
}

struct Home_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

OffsetModifier - 主要是監(jiān)聽ScrollView的滾動(dòng)

用來監(jiān)聽ScrollView的滾動(dòng) 偏移量的改變文章來源地址http://www.zghlxwxcb.cn/news/detail-720198.html

//
//  OffsetModifier.swift
//  SpotifyResponvieUI (iOS)
//
//  Created by lyh on 2022/8/23.
//

import SwiftUI

// 繼承于 ViewModifier 最主要是能方便擴(kuò)展一些常見的設(shè)置屬性
/*
 比如 給Text設(shè)置字體\背景顏色\陰影效果
 extension Text {
     func songStyle() -> some View {
         self
             .font(.system(size: 24, weight: .bold))
             .foregroundColor(.white)
             .shadow(radius: 20)
     }
 }
 
 ??如果是繼承ViewModifier
 struct SongTextViewModifier: ViewModifier {
     func body(content: Content) -> some View {
         content
           .font(.system(size: 24, weight: .bold))
           .foregroundColor(.white)
           .shadow(radius: 20)
     }
 }

 然后直接通過
 
 Text(song)
       .modifier(SongTextViewModifier())
 設(shè)置
 */

struct OffsetModifier: ViewModifier {
    @Binding var offset: CGFloat
    
    // 可選從0返回值
    var returnFromStart: Bool = true
    @State var startValue: CGFloat = 0
    
    func body(content: Content) -> some View {
        content
            .overlay {
                GeometryReader{proxy in
                    Color.clear
                        .preference(key: OffsetKey.self, value: proxy.frame(in: .named("SCROLL")).minY)
                        .onPreferenceChange(OffsetKey.self) { value in
                            if startValue == 0{
                                startValue = value
                            }
                            print(value);

                            offset = (value - (returnFromStart ? startValue : 0))
                            
                            print("offset is \(offset)");

                        }
                }
            }
    }
}

// 偏好的關(guān)鍵
struct OffsetKey: PreferenceKey{
    static var defaultValue: CGFloat = 0
    
    static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
        value = nextValue()
    }
}

Album - 模型
//
//  Album.swift
//  SpotifyResponvieUI (iOS)
//
//  Created by lyh on 2022/8/23.
//

import SwiftUI

// Ablum模型和樣本數(shù)據(jù)
struct Album: Identifiable {
    var id = UUID().uuidString
    var albumName: String
    var albumImage : String
    var isLiked : Bool = false
}


var albums : [Album] = [
    
    Album(albumName: "Positions", albumImage: "Album1"),
    Album(albumName: "The Best", albumImage: "Album2",isLiked: true),
    Album(albumName: "My Everything", albumImage: "Album3"),
    Album(albumName: "Yours Truly", albumImage: "Album4"),
    Album(albumName: "Sweetener", albumImage: "Album5",isLiked: true),
    Album(albumName: "Rain On Me", albumImage: "Album6"),
    Album(albumName: "Stuck With U", albumImage: "Album7"),
    Album(albumName: "7 rings", albumImage: "Album8",isLiked: true),
    Album(albumName: "Bang Bang", albumImage: "Album9"),
    
]

到了這里,關(guān)于【SwiftUI模塊】0060、SwiftUI基于Firebase搭建一個(gè)類似InstagramApp 2/7部分-搭建TabBar的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 寫了一個(gè) SRE 調(diào)試工具,類似一個(gè)小木馬

    遠(yuǎn)程操作機(jī)器有時(shí)會(huì)比較麻煩,我寫了一個(gè)工具,主要功能:1.遠(yuǎn)程執(zhí)行命令 2.上傳下載文件。是一個(gè) Web Server,通過 HTTP 請(qǐng)求來操作機(jī)器,類似一個(gè)小木馬。當(dāng)然,因?yàn)槭且粋€(gè) Web Server,所以也提供了打印 HTTP 請(qǐng)求的能力,方便調(diào)試 Webhook 場景。下面給大家演示一下。 工具代

    2024年04月22日
    瀏覽(22)
  • 基于Maven和IntelliJ IDEA搭建多模塊微服務(wù)

    基于Maven和IntelliJ IDEA搭建多模塊微服務(wù)

    基于Spring Boot、Spring Cloud、Spring Cloud Alibaba的微服務(wù)開發(fā),組件眾多。因此,在創(chuàng)建項(xiàng)目伊始,就應(yīng)當(dāng)考慮版本的管理。以Spring Boot的版本升級(jí)發(fā)布為基礎(chǔ),Spring Cloud的版本升級(jí)發(fā)布,會(huì)匹配Spring Boot升級(jí)發(fā)布的版本。Spring Cloud Alibaba版本升級(jí)發(fā)布,會(huì)匹配Spring Boot和Spring Cloud的

    2024年03月23日
    瀏覽(26)
  • [visionOS][Apple Vision Pro][SwiftUI] 定義一個(gè)UIImage變量,可動(dòng)態(tài)改變,并顯示在Image控件

    實(shí)際上,不需要加.onChange也可以的,這個(gè)只是響應(yīng)myImage變化,跟Image更新圖片沒關(guān)系。 用@State標(biāo)記一個(gè)屬性時(shí),SwitfUI會(huì)自動(dòng)監(jiān)聽這個(gè)屬性的變更,當(dāng)這個(gè)屬性發(fā)生改變,SwiftUI 會(huì)自動(dòng)重新計(jì)算繪制視圖。

    2024年02月16日
    瀏覽(20)
  • 一個(gè)基于.NET Core構(gòu)建的簡單、跨平臺(tái)、模塊化的商城系統(tǒng)

    一個(gè)基于.NET Core構(gòu)建的簡單、跨平臺(tái)、模塊化的商城系統(tǒng)

    今天大姚給大家分享一個(gè)基于.NET Core構(gòu)建的簡單、跨平臺(tái)、模塊化、完全開源免費(fèi)(MIT License)的商城系統(tǒng):Module Shop。 商品:分類、品牌、單位、選項(xiàng)(銷售屬性)、屬性、屬性模板、屬性組。 銷售:訂單、物流。 內(nèi)容:首頁配置、評(píng)論、回復(fù)。 配置:國家、用戶、倉庫

    2024年03月27日
    瀏覽(1132)
  • Latte:一個(gè)類似Sora的開源視頻生成項(xiàng)目

    Latte:一個(gè)類似Sora的開源視頻生成項(xiàng)目

    前段時(shí)間OpenAI發(fā)布的Sora引起了巨大的轟動(dòng),最長可達(dá)1分鐘的高清連貫視頻生成能力秒殺了一眾視頻生成玩家。因?yàn)镾ora沒有公開發(fā)布,網(wǎng)上對(duì)Sora的解讀翻來覆去就那么多,我也不想像復(fù)讀機(jī)一樣再重復(fù)一遍了。 本文給大家介紹一個(gè)類似Sora的視頻生成項(xiàng)目:Latte。為什么說它

    2024年03月11日
    瀏覽(26)
  • 用Vue仿了一個(gè)類似抖音的App

    大家好,我是 Java陳序員 。 今天,給大家介紹一個(gè)基于 Vue3 實(shí)現(xiàn)的高仿抖音開源項(xiàng)目。 關(guān)注微信公眾號(hào):【Java陳序員】,獲取開源項(xiàng)目分享、AI副業(yè)分享、超200本經(jīng)典計(jì)算機(jī)電子書籍等。 douyin —— 一個(gè)基于 Vue、Vite 實(shí)現(xiàn),模仿抖音的移動(dòng)端短視頻項(xiàng)目。 這個(gè)項(xiàng)目的作者原

    2024年04月08日
    瀏覽(18)
  • 基于Flask快速搭建一個(gè)管理系統(tǒng)

    基于Flask快速搭建一個(gè)管理系統(tǒng)

    1.3.1 普通使用 1.3.2 帶有名分組 1.3.3 帶請(qǐng)求限制 1.3.4 帶別名,默認(rèn)別名是函數(shù)名 1.3.5 路由其他參數(shù)(默認(rèn)string) 1.3.6?路由的本質(zhì) 1.3.7? app.add_url_rule參數(shù) 1.5.1 返回時(shí)的格式 1.5.2?坑1,出現(xiàn)找不到模板,解決辦法 項(xiàng)目下面是否有templates文件夾,你的html文件是否放進(jìn)了里面; temp

    2023年04月15日
    瀏覽(16)
  • 一圖看懂 multidict 模塊:類似于字典的鍵值對(duì)集合,鍵可以多次出現(xiàn),資料整理+筆記(大全)

    一圖看懂 multidict 模塊:類似于字典的鍵值對(duì)集合,鍵可以多次出現(xiàn),資料整理+筆記(大全)

    本文由 大俠(AhcaoZhu)原創(chuàng),轉(zhuǎn)載請(qǐng)聲明。 鏈接: https://blog.csdn.net/Ahcao2008 全文介紹系統(tǒng)內(nèi)置 multidict 模塊(類似于字典的鍵值對(duì)集合,鍵可以多次出現(xiàn))、函數(shù)、類及類的方法和屬性。 它通過代碼抓取并經(jīng)AI智能翻譯和人工校對(duì)。 是一部不可多得的權(quán)威字典類工具書。它是系列集

    2024年02月04日
    瀏覽(28)
  • 基于Python+Django,我搭建一個(gè)視頻點(diǎn)播平臺(tái)

    基于Python+Django,我搭建一個(gè)視頻點(diǎn)播平臺(tái)

    學(xué)習(xí)過程中,遇到問題可以咨詢作者 功能介紹 平臺(tái)采用B/S結(jié)構(gòu),后端采用主流的Python語言進(jìn)行開發(fā),前端采用主流的Vue.js進(jìn)行開發(fā)。 整個(gè)平臺(tái)包括前臺(tái)和后臺(tái)兩個(gè)部分。 前臺(tái)功能包括:首頁、視頻列表頁面、視頻詳情頁、用戶中心模塊。 后臺(tái)功能包括:總覽、視頻管理、

    2024年01月18日
    瀏覽(21)
  • 封裝一個(gè)類似微信通訊錄帶有字母檢索功能的vue組件

    封裝一個(gè)類似微信通訊錄帶有字母檢索功能的vue組件

    這里我們直接使用 scrollIntoView 方法 該方法將調(diào)用它的元素滾動(dòng)到瀏覽器窗口的可見區(qū)域 element.scrollIntoView(); // 等同于element.scrollIntoView(true) element.scrollIntoView(alignToTop); //布爾參數(shù) element.scrollIntoView(scrollIntoViewOptions); //對(duì)象參數(shù) 分析一下功能就知道很簡單了。 首先需要

    2024年02月12日
    瀏覽(227)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包