iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Blazor实现微信的Tab切换功能
  • 873
分享到

Blazor实现微信的Tab切换功能

摘要

是否有小伙伴在使用tab的时候想进行滑动切换Tab? 并且有滑动左出左进,右出右进的效果 ,本文将讲解怎么在blazor中去通过滑动切换Tab 本文中的UI组件使用的是MASA Bl

是否有小伙伴在使用tab的时候想进行滑动切换Tab?

并且有滑动左出左进,右出右进的效果 ,本文将讲解怎么在blazor中去通过滑动切换Tab

本文中的UI组件使用的是MASA Blazor,您也可以是其他的UI框架,这个并不影响实际的运行效果,本文案例是兼容PC和Android的,演示效果是android中执行的,在PC中执行效果依然有效(亲测)

首先安装MASA Blazor 根据 MASA Blazor安装MASA Blazor

准备工作

  • 创建 AppBar.razor文件
  • 修改MainLayout.razor文件代码
@inherits LayoutComponentBase

<MApp>
    <AppBar>
        <div class="body">
            @Body
        </div>
    </AppBar>
</MApp>

<style>
.body {
    
    height: calc(100vh - 48px);
    max-height: calc(100vh - 48px);
}
</style>

创建 AppBar.razor.CSS 文件并且添加相关代码 ,以下代码是为了实现切换的时候有一个出入效果,具体代码案例来自Animista - On-Demand CSS Animations Library



.slide-out-left {
    -WEBkit-animation: slide-out-left 0.5s;
    animation: slide-out-left 0.5s;
}


.slide-out-right {
    -webkit-animation: slide-out-right 0.5s;
    animation: slide-out-right 0.5s;
}


.slide-in-right {
    -webkit-animation: slide-in-right 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both;
    animation: slide-in-right 0.5s cubic-bezier(0.250, 0.460, 0.450, 0.940) both;
}


.slide-in-left {
    -webkit-animation: slide-in-left 0.5s;
    animation: slide-in-left 0.5s;
}

@-webkit-keyframes slide-out-left {
    0% {
        -webkit-transfORM: translateX(0);
        transform: translateX(0);
        opacity: 1;
    }

    100% {
        -webkit-transform: translateX(-1000px);
        transform: translateX(-1000px);
        opacity: 0;
    }
}

@keyframes slide-out-left {
    0% {
        -webkit-transform: translateX(0);
        transform: translateX(0);
        opacity: 1;
    }

    100% {
        -webkit-transform: translateX(-1000px);
        transform: translateX(-1000px);
        opacity: 0;
    }
}


@-webkit-keyframes slide-out-right {
    0% {
        -webkit-transform: translateX(0);
        transform: translateX(0);
        opacity: 1;
    }

    100% {
        -webkit-transform: translateX(1000px);
        transform: translateX(1000px);
        opacity: 0;
    }
}

@keyframes slide-out-right {
    0% {
        -webkit-transform: translateX(0);
        transform: translateX(0);
        opacity: 1;
    }

    100% {
        -webkit-transform: translateX(1000px);
        transform: translateX(1000px);
        opacity: 0;
    }
}


@-webkit-keyframes slide-in-left {
    0% {
        -webkit-transform: translateX(-1000px);
        transform: translateX(-1000px);
        opacity: 0;
    }

    100% {
        -webkit-transform: translateX(0);
        transform: translateX(0);
        opacity: 1;
    }
}

@keyframes slide-in-left {
    0% {
        -webkit-transform: translateX(-1000px);
        transform: translateX(-1000px);
        opacity: 0;
    }

    100% {
        -webkit-transform: translateX(0);
        transform: translateX(0);
        opacity: 1;
    }
}
@-webkit-keyframes slide-in-right {
    0% {
        -webkit-transform: translateX(1000px);
        transform: translateX(1000px);
        opacity: 0;
    }

    100% {
        -webkit-transform: translateX(0);
        transform: translateX(0);
        opacity: 1;
    }
}

@keyframes slide-in-right {
    0% {
        -webkit-transform: translateX(1000px);
        transform: translateX(1000px);
        opacity: 0;
    }

    100% {
        -webkit-transform: translateX(0);
        transform: translateX(0);
        opacity: 1;
    }
}

创建AppBar的模型用于动态添加导航栏, 创建AppBarDto.cs文件并添加相关代码

public class AppBarDto
{
    public string Key { get; set; }

    /// <summary>
    /// 标题
    /// </summary>
    public string Title { get; init; }

    /// <summary>
    /// 图标
    /// </summary>
    public string? Icon { get; set; }

    /// <summary>
    /// 路由
    /// </summary>
    public string Href { get; init; }

    public AppBarDto(string title, string href, string? icon = null)
    {
        Title = title;
        Icon = icon;
        Href = href;
        Key = Guid.NewGuid().ToString("N");
    }
}

添加相关页面,在Pages文件夹下,分别创建Index.razor,Feature.razor,Friend.razor,PersonalCenter.razor

文件相关代码:
Index.razor

@page "/"
<h3>Index</h3>

Feature.razor

@page "/feature"
<h3>Feature</h3>

Friend.razor

@page "/friend"
<h3>Friend</h3>

PersonalCenter.razor

@page "/personal-center"
<h3>PersonalCenter</h3>

@page "/personal-center"
<h3>PersonalCenter</h3>

修改AppBar.razor代码

<div class="@Class" @ontouchstart="TouchStart" @ontouchend="TouchEnd" @onmousedown="Mousedown" @onmouseup="Mouseup" style="height: 100%">
    @ChildContent
</div>

 @*这里也可以是其他组件的Tab,其实只是记录当前的导航的数据*@
<MTabs Centered
       BackgroundColor="indiGo"
       ShowArrows="false"
       Value="selectModel.Key"
       Dark>
    @foreach (var i in AppBars)
    {
        <MTab Value="i.Key" OnClick="()=>GoHref(i)">
            @if (!string.IsNullOrEmpty(i.Icon))
            {
                <MIcon Dark>@i.Icon</MIcon>
            }
            @i.Title
        </MTab>
    }
</MTabs>

创建AppBar.razor.cs 添加以下代码


public partial class AppBar
{
    #region Inject

    [Inject]
    public required NavigationManager NavigationManager { get; set; }

    #endregion

    private readonly List<AppBarDto> AppBars = new();

    [Parameter]
    public RenderFragment ChildContent { get; set; }

    private AppBarDto selectModel;

    private string Class { get; set; }

    protected override void OnInitialized()
    {
        AppBars.Add(new AppBarDto("首页", "/", "home"));
        AppBars.Add(new AppBarDto("好友", "/personal-center", "mdi-account-group-outline"));
        AppBars.Add(new AppBarDto("功能", "/feature", "mdi-wrench"));
        AppBars.Add(new AppBarDto("个人中心", "/personal-center", "mdi-badge-account-alert"));

        // 默认选择的导航标签
        selectModel = AppBars[0];

        base.OnInitialized();
    }

    /// <summary>
    /// 导航栏跳转
    /// </summary>
    /// <param name="appBar"></param>
    private void GoHref(AppBarDto appBar)
    {
        // 防止重复点击
        if(appBar == selectModel)
        {
            return;
        }

        // 当点击导航的索引大于现在导航时启动滑动效果
        if(AppBars.IndexOf(appBar) > AppBars.IndexOf(selectModel))
        {
            Class = "slide-out-left";
            Task.Run(async () =>
            {
                // 由于特效时间为0.5s 这里是等待特效完成
                await Task.Delay(450);
                NavigationManager.NavigateTo(selectModel.Href);
                Class = "slide-in-right";
                _ = InvokeAsync(StateHasChanged);
            });
        }
        // 当点击导航的索引小于现在导航时启动滑动效果
        else if (AppBars.IndexOf(appBar) < AppBars.IndexOf(selectModel))
        {
            Class = "slide-out-right";
            Task.Run(async () =>
            {
                // 由于特效时间为0.5s 这里是等待特效完成
                await Task.Delay(450);
                NavigationManager.NavigateTo(selectModel.Href);
                Class = "slide-in-left";
                _ = InvokeAsync(StateHasChanged);
            });
        }
        selectModel = appBar;
        NavigationManager.NavigateTo(appBar.Href);
    }


    /// <summary>
    /// 开始X坐标
    /// </summary>
    private double _startX;


    #region 移动端滑动处理

    /// <summary>
    /// 记录开始坐标
    /// </summary>
    /// <param name="args"></param>
    private void TouchStart(TouchEventArgs args)
    {
        var touch = args.ChangedTouches[0];
        _startX = touch.ScreenX;
    }

    private void TouchEnd(TouchEventArgs args)
    {
        var touch = args.ChangedTouches[0];
        Switchover((decimal)touch.ScreenX);
    }

    #endregion

    #region PC滑动处理

    /// <summary>
    /// 记录开始坐标
    /// </summary>
    /// <param name="args"></param>
    private void Mousedown(MouseEventArgs args)
    {
        _startX = args.ScreenX;
    }

    private void Mouseup(MouseEventArgs args)
    {
        Switchover((decimal)args.ScreenX);
    }

    #endregion

    private void Switchover(decimal screenX)
    {
        var index = AppBars.IndexOf(selectModel);
        // 限制过度滑动
        if (index == AppBars.Count || index > AppBars.Count)
        {
            return;
        }

        // 设置滑动最大位限制,达到这个限制才滑动生效
        var size = 200;

        // 需要滑动200才切换 如果开始坐标x大于 当前结束的x坐标往右边切换tab
        if ((decimal)_startX - size > screenX)
        {
            // 如果右边往左边滑动 当前索引是当前最大数量的话不需要切换
            if (index == AppBars.Count - 1)
            {
                return;
            }
            selectModel = AppBars[index + 1];
            Class = "slide-out-left";

            Task.Run(async () =>
            {
                // 由于特效时间为0.5s 这里是等待特效完成
                await Task.Delay(450);
                NavigationManager.NavigateTo(selectModel.Href);
                Class = "slide-in-right";
                _ = InvokeAsync(StateHasChanged);
            });
        }
        else if ((decimal)_startX + size < screenX)
        {
            // 如果左边往右边滑动 当前索引是0的话不需要切换
            if (index == 0)
            {
                return;
            }
            selectModel = AppBars[index - 1];
            Class = "slide-out-right";
            Task.Run(async () =>
            {
                // 由于特效时间为0.5s 这里是等待特效完成
                await Task.Delay(450);
                NavigationManager.NavigateTo(selectModel.Href);
                Class = "slide-in-left";
                _ = InvokeAsync(StateHasChanged);
            });
        }
    }
}

运行效果:

到此这篇关于Blazor实现微信的Tab切换功能的文章就介绍到这了,更多相关Blazor实现微信Tab切换内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Blazor实现微信的Tab切换功能

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

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

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

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

下载Word文档
猜你喜欢
  • Blazor实现微信的Tab切换功能
    是否有小伙伴在使用tab的时候想进行滑动切换Tab? 并且有滑动左出左进,右出右进的效果 ,本文将讲解怎么在Blazor中去通过滑动切换Tab 本文中的UI组件使用的是MASA Bl...
    99+
    2023-01-28
    Blazor实现微信Tab切换 类似微信Tab切换 微信Tab切换 滑动切换Tab
  • 微信小程序实现tab点击切换
    本文实例为大家分享了微信小程序无滑动效果的tab点击切换的具体代码,供大家参考,具体内容如下 <!--pages/dingdan/dingdan.wxml--> <...
    99+
    2024-04-02
  • JavaScript实现Tab栏切换功能详解
    目录1.实现效果2.功能需求3.抽象对象4.切换功能实现5.添加功能实现6.删除功能实现1.实现效果 2.功能需求 点击tab栏,可以切换效果.点击+号,可以添加tab项和内容项....
    99+
    2022-11-13
    JS Tab栏切换 JavaScript Tab栏切换
  • Android实现Tab切换界面功能详解
    目录一、实验目的二、实验任务三、实验内容与要求四、实现效果五、代码实现 六、实验总结一、实验目的 1. 掌握各种高级UI控件的基本使用; 2. 能够实现Tab切换效果。 二...
    99+
    2024-04-02
  • 微信小程序实现tab组件切换动画
    目录前言如何实现页面tab1.使用内置组件scroll-view2.实现点击时出现的背景样式3.scroll-into-view前言 本次主要内容是介绍页面tab的开发,如何实现ta...
    99+
    2022-11-13
    小程序tab组件切换 微信小程序tab组件 小程序tab切换
  • 微信小程序实现简单Tab切换效果
    本文实例为大家分享了微信小程序实现Tab切换效果的具体代码,供大家参考,具体内容如下 使用步骤 代码如下(示例): 定义一个状态status data: { status:...
    99+
    2024-04-02
  • Android如何实现Tab切换界面功能
    这篇文章主要介绍“Android如何实现Tab切换界面功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Android如何实现Tab切换界面功能”文章能帮助大家解决问题。一、实验目的 掌握各种高级U...
    99+
    2023-06-30
  • 微信小程序实现tab页面切换效果
    本文实例为大家分享了微信小程序实现tab页面切换的具体代码,供大家参考,具体内容如下 html 页面 <view class="bgwhite">     <sc...
    99+
    2024-04-02
  • 微信小程序实现滑动/点击切换Tab
    背景 👏 swiper+scroll-view实现滑动/点击切换Tab,以及scroll-left的使用~ 🥇文末分享源代码。记得点赞+关注+收藏! 1.实现效果 2.实现步骤 2.1 scroll-vie...
    99+
    2023-08-16
    微信小程序 小程序 前端
  • 微信小程序如何实现tab切换效果
    这篇文章将为大家详细讲解有关微信小程序如何实现tab切换效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微信小程序之tab切换效果,如图:最近在学习微信小程序并把之前的...
    99+
    2024-04-02
  • CSS3中怎么实现tab选项卡切换功能
    本篇文章给大家分享的是有关CSS3中怎么实现tab选项卡切换功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。CSS3伪类target利用ta...
    99+
    2024-04-02
  • 小程序怎么实现tab卡片切换功能
    这篇文章主要介绍小程序怎么实现tab卡片切换功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、UI与交互首先我们来看看要实现的ui模样和交互效果吧,下图是我们的一个入口,以下的每...
    99+
    2024-04-02
  • 实现微信小程序中的多语言切换功能
    随着全球化的发展,各行各业都在越来越多地使用多种语言进行交流和沟通。而在开发微信小程序时,为了让更多的用户能够方便地使用小程序,多语言切换功能的实现就变得非常重要了。在本文中,我们将介绍如何在微信小程序中实现多语言切换功能,并提供具体的代码...
    99+
    2023-11-21
    微信小程序 多语言 切换
  • 怎么使用Vue实现一个tab栏切换功能
    本篇内容介绍了“怎么使用Vue实现一个tab栏切换功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、创建Vue项目首先需要安装Vue C...
    99+
    2023-07-05
  • 微信小程序点击实现样式切换功能的方法
    本篇内容主要讲解“微信小程序点击实现样式切换功能的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序点击实现样式切换功能的方法”吧!普通的web开发可以通过JavaScript获取HT...
    99+
    2023-06-26
  • AngularJS如何实现标签页tab选项卡切换功能
    这篇文章将为大家详细讲解有关AngularJS如何实现标签页tab选项卡切换功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:选项卡一:JavaScript+h...
    99+
    2024-04-02
  • 怎么在微信小程序中实现一个Tab切换效果
    这篇文章给大家介绍怎么在微信小程序中实现一个Tab切换效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用步骤代码如下(示例):定义一个状态statusdata: {   st...
    99+
    2023-06-15
  • uniapp组件之tab选项卡滑动切换功能实现
    目录uniapp组件之tab选项卡滑动切换补充:uniapp实现tabs切换(可滑动)uniapp组件之tab选项卡滑动切换   效果如下:   代码如下:&n...
    99+
    2023-01-31
    uniapp tab选项卡滑动切换 uniapp滑动切换 uniapp tab切换 uniapp tab选项卡
  • 微信小程序如何实现tab切换可滑动切换导航栏跟随滚动
    这篇文章给大家分享的是有关微信小程序如何实现tab切换可滑动切换导航栏跟随滚动的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。解决过程1.在想要实现这个问题的时候找了不少别人的博客...
    99+
    2024-04-02
  • JavaScript实现Tab点击切换
    Tab 选项卡切换效果在现如今的网页中,运用的也是比较多的,包括点击切换、滑动切换、延迟切换、自动切换等多种效果,在这篇博文里,我们是通过原生 Jquery 来实现 Tab 点击切换...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作