iis服务器助手广告
返回顶部
首页 > 资讯 > 服务器 >iOS 吸顶效果
  • 823
分享到

iOS 吸顶效果

ios吸顶效果 2023-09-17 18:09:03 823人浏览 八月长安
摘要

项目中,在列表向上滚动时,有时需要将某个控件置顶,这就是我们常见的吸顶效果。 1. UITableView 吸顶效果 UITableView是自带吸顶效果,我们把需要置顶的控件设置为SectionHe

项目中,在列表向上滚动时,有时需要将某个控件置顶,这就是我们常见的吸顶效果。

1. UITableView 吸顶效果

UITableView是自带吸顶效果,我们把需要置顶的控件设置为SectionHeaderView,这样在滚动时,该控件会自动置顶。

- (UITableView *)tableView {    if (!_tableView) {        _tableView = [[UKNestedTableView alloc] init];                _tableView.bounces = NO;        _tableView.showsVerticalScrollIndicator = NO;        _tableView.delegate = self;        _tableView.dataSource = self;                [_tableView reGISterClass:[UITableViewCell class] forCellReuseIdentifier:@"CellId"];    }    return _tableView;}#pragma mark - UITableViewDataSource -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {    return 2;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {    if (section == 0) {        return 1;    }    return 20;}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {    if (indexPath.section == 0) {        return 150;    }    return 60;}- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {    if (section == 1) {        UIView *headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 50)];        headerView.backgroundColor = [UIColor blueColor];        return headerView;    }    return nil;}- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {    if (section == 1) {        return 50;    }    return 0;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellId" forIndexPath:indexPath];        if (indexPath.section == 0) {        cell.backgroundColor = [UIColor yellowColor];        cell.textLabel.text = @"section 0";    } else {        if (indexPath.row % 2 == 0) {            cell.backgroundColor = [UIColor grayColor];        } else {            cell.backgroundColor = [UIColor whiteColor];        }        cell.textLabel.text = [NSString stringWithFORMat:@"item - %ld", indexPath.row];    }        return cell;}

自定义UKNestedTableView

@implementation UKNestedTableView- (instancetype)init {    self = [super initWithFrame:CGRectZero style:UITableViewStylePlain];    if (self) {        self.backgroundColor = [UIColor whiteColor];        self.separatorColor = [UIColor clearColor];                self.separatorStyle = UITableViewCellSeparatorStyleNone;                        if (@available(iOS 11.0, *)) {            self.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;        }        self.estimatedRowHeight = 0.000;        self.estimatedSectionHeaderHeight = 0.000;        self.estimatedSectionFooterHeight = 0.000;                if (@available(iOS 13.0,*)) {            self.automaticallyAdjustsScrollIndicatorInsets = NO;        }        if (@available(iOS 15.0,*)) { // 去除表格头留白            self.sectionHeaderTopPadding = YES;         }    }    return self;}@end

效果如下

在这里插入图片描述

2. 带TabView的吸顶效果

UITableView的吸顶效果能满足部分的要求,但在实际应用中,需要置顶的往往是一些标签页,对应的也是多个列表。

我们用UKTabView作为置顶的控件,并对应多个内容。

- (UKTabView *)tabView {    if (!_tabView) {        _tabView = [[UKTabView alloc] initWithFrame:CGRectMake(0, 0, kScreenWidth, 50)];        [_tabView setIndicatorWidth:80 height:2 radius:1 color:[UIColor blueColor]];                UKCustomTabItemView *tabItemView1 = [[UKCustomTabItemView alloc] init];        [tabItemView1 setText:@"选项1"];        [_tabView addItemView:tabItemView1];                UKCustomTabItemView *tabItemView2 = [[UKCustomTabItemView alloc] init];        [tabItemView2 setText:@"选项2"];        [_tabView addItemView:tabItemView2];                _tabView.delegate = self;                [_tabView setSelection:0];    }    return _tabView;}- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {    if (section == 1) {        return self.tabView;    }    return nil;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellId" forIndexPath:indexPath];    if (indexPath.section == 0) {        cell.backgroundColor = [UIColor yellowColor];        cell.textLabel.text = @"section 0";    } else {        if (indexPath.row % 2 == 0) {            if (self.selection == 0) {                cell.backgroundColor = [UIColor grayColor];            } else {                cell.backgroundColor = [UIColor darkGrayColor];            }        } else {            cell.backgroundColor = [UIColor whiteColor];        }        cell.textLabel.text = [NSString stringWithFormat:@"item %ld - %ld", self.selection, indexPath.row];    }        return cell;}#pragma mark - UKTabViewDelegate -- (void)onTabViewSelected:(UKTabView *)tabView position:(NSInteger)position {    self.selection = position;    [self.tableView reloadData];}

效果如下
在这里插入图片描述

上述的方法简单地实现了标签页置顶和选项卡切换功能,但由于我们只能共用一个列表,所以会发生两个标签页都滚动的现象。

为此,我们需要优化滚动的偏移,首先在滚动结束时记录偏移量,然后在切换标签页时设置原有的偏移量。

@property(nonatomic, assign) NSInteger selection;@property(nonatomic, assign) CGFloat tab1Offset;@property(nonatomic, assign) CGFloat tab2Offset;// 拖动结束- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {    NSLog(@"scrollViewDidEndDragging");    [self recordOffset:scrollView];}// 滚动结束- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {    NSLog(@"scrollViewDidEndDecelerating");    [self recordOffset:scrollView];}- (void)recordOffset:(UIScrollView *)scrollView {    if (self.selection == 0) {        self.tab1Offset = scrollView.contentOffset.y;        NSLog(@"tab1Offset = %.2f", self.tab1Offset);    } else if (self.selection == 1) {        self.tab2Offset = scrollView.contentOffset.y;        NSLog(@"tab2Offset = %.2f", self.tab2Offset);    }}

在切换标签页时,设置实际的偏移量

- (void)onTabViewSelected:(UKTabView *)tabView position:(NSInteger)position {    self.selection = position;    [self.tableView reloadData];    // 有时设置tableView.contentOffset无效,需要提前刷新    [self.tableView layoutIfNeeded];    if (position == 0) {        self.tableView.contentOffset = CGPointMake(0, self.tab1Offset);    } else if (position == 1) {        self.tableView.contentOffset = CGPointMake(0, self.tab2Offset);    }}

效果如下
在这里插入图片描述

虽然我们记录了原有的偏移量,但从实际的效果来看,切换时TabView会在同样的位置,闪烁比较严重。为此,我们需要尽量保持TabView的位置。

- (void)onTabViewSelected:(UKTabView *)tabView position:(NSInteger)position {    self.selection = position;    [self.tableView reloadData];    [self.tableView layoutIfNeeded];    if (position == 0) {        self.tab1Offset = [self getDestOffset:self.tab1Offset originOffset:self.tab2Offset];        self.tableView.contentOffset = CGPointMake(0, self.tab1Offset);    } else if (position == 1) {        self.tab2Offset = [self getDestOffset:self.tab2Offset originOffset:self.tab1Offset];        self.tableView.contentOffset = CGPointMake(0, self.tab2Offset);    }}// 如果TabView已经置顶,切换时保持置顶。// 1、如果切换后的内容已经置顶,保持原有效果// 2、如果切换后的内容没有置顶,修改切换后的内容为置顶// 如果TabView没有制度,切换后保持一致- (CGFloat)getDestOffset:(CGFloat)destOffset originOffset:(CGFloat)originOffset {    if (originOffset >= 150) {        if (destOffset >= 150) {            return destOffset;        } else {            return 150;        }    } else {        return originOffset;    }}

效果如下
在这里插入图片描述

虽然现在的方案已经解决了大部分的需求,但还是留下了一点瑕疵,

  1. 内容只能用UIScrollView显示
  2. 为了保持UKTableView保持位置不变,不能完全保证内容的偏移位置。
  3. 如果一个内容较短的情况下,依然会有偏移量的问题,虽然我们可以通过填充空白内容来改善这个问题,但又增加了很多工作量。
  4. 内容切换时没有平顺的效果。

3. UITableView+UICollectionView嵌套

为了尽可能的完善我们的吸顶效果,我们尝试用UITableView+UICollectionView的组合来实现吸顶和左右滑动二种效果。

我们自定义UKNestedScrollView

@interface UKNestedScrollView()@property(nonatomic, strong) NSMutableArray <UITableView *> *contentViewArray;@property(nonatomic, assign) BOOL dragging;@end@implementation UKNestedScrollView- (instancetype)initWithFrame:(CGRect)frame {    self = [super initWithFrame:frame];    if (self) {        [self setupInitialUI];    }    return self;}// 设置表头- (void)setHeaderView:(UIView *)headerView {    self.tableView.tableHeaderView = headerView;    self.headerHeight = headerView.frame.size.height;}// 添加标签页和内容- (void)addTabView:(UKTabItemView *)itemView contentView:(UITableView *)contentView {    [self.tabView addItemView:itemView];        [self.contentViewArray addObject:contentView];        [self.collectionView reloadData];}- (void)setupInitialUI {    // UKNestedScrollView包含一个UITableView    [self addSubview:self.tableView];    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {        make.left.right.top.bottom.equalTo(self);    }];}- (UITableView *)tableView {    if (!_tableView) {        _tableView = [[UKNestedTableView alloc] init];                _tableView.bounces = NO;        _tableView.showsVerticalScrollIndicator = NO;        _tableView.delegate = self;        _tableView.dataSource = self;                [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"CellId"];    }    return _tableView;}- (UITableView *)tableView {    if (!_tableView) {        _tableView = [[UKNestedTableView alloc] init];                _tableView.bounces = NO;        _tableView.showsVerticalScrollIndicator = NO;        _tableView.delegate = self;        _tableView.dataSource = self;                [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"CellId"];    }    return _tableView;}// SectionHeaderView包含UKTabView和UICollectionView- (UIView *)sectionHeaderView {    if (!_sectionHeaderView) {        _sectionHeaderView = [[UIView alloc] initWithFrame:self.frame];                [_sectionHeaderView addSubview:self.tabView];                [_sectionHeaderView addSubview:self.collectionView];    }    return _sectionHeaderView;}- (UKTabView *)tabView {    if (!_tabView) {        _tabView = [[UKTabView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, 50)];        [_tabView setIndicatorWidth:80 height:2 radius:1 color:[UIColor blueColor]];        _tabView.delegate = self;    }    return _tabView;}- (UICollectionView *)collectionView {    if (!_collectionView) {        UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];        layout.scrollDirection = UICollectionViewScrollDirectionHorizontal;        layout.itemSize = CGSizeMake(self.frame.size.width, self.frame.size.height - 50);        layout.minimumLineSpacing = CGFLOAT_MIN;        layout.minimumInteritemSpacing = CGFLOAT_MIN;                _collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 50, self.frame.size.width, self.frame.size.height - 50) collectionViewLayout:layout];        _collectionView.pagingEnabled = YES;        _collectionView.bounces = NO;        _collectionView.showsHorizontalScrollIndicator = NO;        _collectionView.dataSource = self;        _collectionView.delegate = self;                [_collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"CellId"];    }    return _collectionView;}#pragma mark - UITableViewDataSource -- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {    return self.frame.size.height;}- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {    return self.sectionHeaderView;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {    return 0;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    return [[UITableViewCell alloc] init];}#pragma mark - UICollectionViewDataSource -- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {    return self.contentViewArray.count;}- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {    UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CellId" forIndexPath:indexPath];        UITableView *contentView = self.contentViewArray[indexPath.row];    [contentView removeFromSuperview];        [cell.contentView addSubview:contentView];    [contentView mas_makeConstraints:^(MASConstraintMaker *make) {        make.left.right.top.bottom.equalTo(cell.contentView);    }];        return cell;}#pragma mark - UIScrollViewDelegate -- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {    if (scrollView == self.collectionView) {        self.dragging = YES;    }}- (void)scrollViewDidScroll:(UIScrollView *)scrollView {    if (scrollView == self.collectionView) {        if (self.dragging) {            CGFloat width = scrollView.contentOffset.x;            NSInteger page = width/self.frame.size.width + 0.5;                        [self.tabView setSelection:page offsetRatio:(width/self.frame.size.width - page)];        }    }}- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {    if (scrollView == self.collectionView) {        CGFloat width = scrollView.contentOffset.x;        NSInteger page = width/self.frame.size.width + 0.5;        [self.tabView setSelection:page];        self.dragging = NO;    }}- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {    if (scrollView == self.collectionView && !decelerate) {        CGFloat width = scrollView.contentOffset.x;        NSInteger page = width/self.frame.size.width + 0.5;        [self.tabView setSelection:page];        self.dragging = NO;    }} #pragma mark - UKTabViewDelegate -- (void)onTabViewSelected:(UKTabView *)tabView position:(NSInteger)position {    [self collectionViewScrollToPosition:position];}

为了让UICollectionView内的手势能被UITableView接收,需要在UKNestedTableView里面加上

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {    return YES;}

显示如下
在这里插入图片描述

我们可以看到当列表滑动时,两个列表都在滑动,而且里面的内容的滑动更快。这主要是因为例外两个列表都在滑动,所以里面的列表其实是两个滑动距离相加,所有我们需要在外面列表滑动时,禁止里面列表的滑动。

if (scrollView == self.tableView) {    self.offset = self.tableView.contentOffset.y;    // changed表示外面列表在滑动    self.changed = YES;} else {    NSInteger position = 0;    for (UIScrollView *contentView in self.contentViewArray) {        if (contentView == scrollView) {            // 如果外面列表滑动,禁止里面列表滑动事件            if (self.changed) {                scrollView.contentOffset = CGPointMake(0, [self.offsetArray[position] floatValue]);                self.changed = NO;            } else {                // 记录当前页面偏移量,方便后面禁止事件                self.offsetArray[position] = [NSNumber numberWithFloat:scrollView.contentOffset.y];            }                       break;        }        position++;    }}

效果如下
在这里插入图片描述

现在的效果已经基本满足了我们的需求,有吸顶效果、能左右滑动、能记录列表偏移量,内容滑动时也比较平顺了。

最后我们尝试了一下下拉时控制内容先下拉,也许后面有用

if (scrollView == self.tableView) {    self.originOffset = self.offset;    self.offset = self.tableView.contentOffset.y;    self.changed = YES;} else {    NSInteger position = 0;    for (UIScrollView *contentView in self.contentViewArray) {        if (contentView == scrollView) {CGFloat scrollViewOffset = scrollView.contentOffset.y - [self.offsetArray[position] floatValue];            if (scrollViewOffset > 0) {                if (self.changed) {                    scrollView.contentOffset = CGPointMake(0, [self.offsetArray[position] floatValue]);                    self.changed = NO;                } else {                    self.offsetArray[position] = [NSNumber numberWithFloat:scrollView.contentOffset.y];                }            } else if (scrollViewOffset < 0) {                if (self.changed) {                    self.offset = self.originOffset;                    self.tableView.delegate = nil;                    self.tableView.contentOffset = CGPointMake(0, self.offset);                    self.tableView.delegate = self;                    self.changed = NO;                }                self.offsetArray[position] = [NSNumber numberWithFloat:scrollView.contentOffset.y];            }            break;        }        position++;    }}

来源地址:https://blog.csdn.net/chennai1101/article/details/130131507

--结束END--

本文标题: iOS 吸顶效果

本文链接: https://www.lsjlt.com/news/411287.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • iOS 吸顶效果
    项目中,在列表向上滚动时,有时需要将某个控件置顶,这就是我们常见的吸顶效果。 1. UITableView 吸顶效果 UITableView是自带吸顶效果,我们把需要置顶的控件设置为SectionHe...
    99+
    2023-09-17
    ios 吸顶效果
  • RecyclerVIew实现悬浮吸顶效果
    RecyclerVIew实现悬浮吸顶效果图 这里写图片描述主页面布局<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="htt...
    99+
    2023-05-30
    recyclerview 悬浮吸顶 recycle
  • Android实现上拉吸顶效果
    本文实例为大家分享了Android实现上拉吸顶效果的具体代码,供大家参考,具体内容如下 效果图 1.home_layout.xml 此布局即可实现上拉标题固定在顶部 <xml...
    99+
    2024-04-02
  • Android CoordinatorLayout+AppBarLayout顶部栏吸顶效果的实现
    1.控件简介。 CoordinatorLayout遵循Material 风格,包含在 support Library中,结合AppbarLayout, CollapsingToolbarLayout等 可 产生各种炫酷的折叠悬浮效果。   ...
    99+
    2023-10-06
    android
  • AndroidJetpackCompose实现列表吸顶效果
    目录stickyHeader实体类加载假数据吸顶标题二级条目完整代码效果图安卓传统的 Recyclerview 打造悬浮头部StickyHeader的吸顶效果,十分麻烦,而在Comp...
    99+
    2024-04-02
  • 原生js如何实现吸顶效果
    这篇文章给大家分享的是有关原生js如何实现吸顶效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现思路如下:1. div初始居普通文档流中2. 给window添加scroll事...
    99+
    2024-04-02
  • react.js中怎么实现tab吸顶效果
    这篇文章给大家分享的是有关react.js中怎么实现tab吸顶效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在react项目开发中有一个需求是,页面滚动到tab所在位置时,t...
    99+
    2024-04-02
  • 小程序实现简单吸顶效果
    本文实例为大家分享了小程序实现吸顶效果的具体代码,供大家参考,具体内容如下 要求: 1.使页面某一区域始终显示在页面的最顶端2.页面流畅不卡顿 初始效果如图: 最终效果: 1.w...
    99+
    2024-04-02
  • 微信小程序实现吸顶盒效果
    本文实例为大家分享了微信小程序实现吸顶盒效果的具体代码,供大家参考,具体内容如下 html部分  <!-- 列表 -->     <view class="pa...
    99+
    2024-04-02
  • 微信小程序实现简单吸顶效果
    本文实例为大家分享了微信小程序实现吸顶效果的具体代码,供大家参考,具体内容如下 吸顶效果思路: 1.首先获取 Tab 栏与顶部的距离; 2.监听页面滚动事件 onPageScroll...
    99+
    2024-04-02
  • Android Jetpack Compose如何实现列表吸顶效果
    这篇文章主要介绍“Android Jetpack Compose如何实现列表吸顶效果”,在日常操作中,相信很多人在Android Jetpack Compose如何实现列表吸顶效果问题上存在疑惑,小编...
    99+
    2023-06-29
  • 如何使用Android实现上拉吸顶效果
    这篇文章给大家分享的是有关如何使用Android实现上拉吸顶效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下效果图1.home_layout.xml此布局即可实现上拉标题固定在顶部<xml&n...
    99+
    2023-06-29
  • AndroidRecyclerView实现吸顶动态效果流程分析
    目录一、ItemDecoration二、实现RecyclerView吸顶效果1、实现一个简单的RecyclerView2、通过ItemDecoration画分割线3、画出每个分组的组...
    99+
    2022-12-22
    Android RecyclerView吸顶效果 Android RecyclerView
  • 小程序如何实现简单吸顶效果
    这篇“小程序如何实现简单吸顶效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“小程序如何实现简单吸顶效果”文章吧。要求:使页...
    99+
    2023-06-30
  • 微信小程序实现简单的吸顶效果
    本文实例为大家分享了微信小程序实现简单吸顶效果的具体代码,供大家参考,具体内容如下 需求:进入页面后首先看到banner布局,然后是tab切换栏以及页面内容,当页面滚动到一定距离后,...
    99+
    2024-04-02
  • WEB移动端粘黏吸顶效果怎么解决
    这篇文章主要介绍“WEB移动端粘黏吸顶效果怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“WEB移动端粘黏吸顶效果怎么解决”文章能帮助大家解决问题。 首先判...
    99+
    2024-04-02
  • 微信小程序怎么实现吸顶盒效果
    本文小编为大家详细介绍“微信小程序怎么实现吸顶盒效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“微信小程序怎么实现吸顶盒效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。html部分 <!--...
    99+
    2023-07-02
  • vue中el-table实现自动吸顶效果(支持fixed)
    目录前言实现思路效果:使用:主要源码:前言 看了很多案例,从简单的角度,position:sticky,似乎是比较理想的选择,可是当el-table设置了fixed后,这里的fix...
    99+
    2024-04-02
  • Android进阶CoordinatorLayout协调者布局实现吸顶效果
    目录引言1 CoordinatorLayout功能介绍1.1 CoordinatorLayout的依赖交互原理1.2 CoordinatorLayout的嵌套滑动原理2 Coordi...
    99+
    2023-01-29
    Android CoordinatorLayout吸顶 Android 协调者布局
  • 微信小程序实现吸顶效果的方法实例
    目录1. 实现方式2. 存在的问题3. 考虑是否有更好的实现方式总结背景是做一个日期title随着用户滑动,当滑到当前日期list数据时,有一个吸顶效果,并且该效果与原来样式不一样 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作