Blazor Webassembly中的无JavaScript引导旋转木马

Blazor Webassembly中的无JavaScript引导旋转木马,blazor,.net-5,blazor-webassembly,asp.net-blazor,Blazor,.net 5,Blazor Webassembly,Asp.net Blazor,我对Blazor不熟悉 我在.NET5的BlazorWebAssembly项目中创建了一个旋转木马。它不会自动滑动,其上一个和下一个按钮不工作 请建议如何在没有javascript的情况下解决此问题 下面是我的代码 <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel"> <ol class="ca

我对Blazor不熟悉

我在.NET5的BlazorWebAssembly项目中创建了一个旋转木马。它不会自动滑动,其上一个和下一个按钮不工作

请建议如何在没有javascript的情况下解决此问题

下面是我的代码

<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
    <ol class="carousel-indicators">
        <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
        <li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
        <li data-target="#carouselExampleIndicators" data-slide-to="2"></li>
    </ol>
    <div class="carousel-inner">
        <div class="carousel-item active">
            <img class="d-block w-100" src="/images/slide/slide-1.jpg" alt="First slide">
        </div>
        <div class="carousel-item">
            <img class="d-block w-100" src="/images/slide/slide-2.jpg" alt="Second slide">
        </div>
        <div class="carousel-item">
            <img class="d-block w-100" src="/images/slide/slide-3.jpg" alt="Third slide">
        </div>
    </div>
    <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
        <span class="carousel-control-prev-icon" aria-hidden="true"></span>
        <span class="sr-only">Previous</span>
    </a>
    <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
        <span class="carousel-control-next-icon" aria-hidden="true"></span>
        <span class="sr-only">Next</span>
    </a>
</div>


  • PS:我正在使用VS2019和.NET 5生成的默认项目模板,并且没有包含任何额外的javascript文件。

    经过广泛的研究,现在我能够在blazor中自动滚动旋转木马,而无需使用javascript。我还使用了prev和next按钮,并添加了一项功能:当用户单击prev或next时,它会进入手动模式,并自动停止滚动。以下是我的解决方案:

    @page "/"
    @using System.Threading;
    
    <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
        <ol class="carousel-indicators">
            <li data-target="#carouselExampleIndicators" data-slide-to="0" class="@firstSlideCss"></li>
            <li data-target="#carouselExampleIndicators" data-slide-to="1" class="@secondSlideCss"></li>
            <li data-target="#carouselExampleIndicators" data-slide-to="2" class="@thirdSlideCss"></li>
        </ol>
        <div class="carousel-inner">
            <div class="carousel-item @firstSlideCss">
                <img class="d-block w-100" src="/images/slide/slide-1.jpg" alt="First slide">
            </div>
            <div class="carousel-item @secondSlideCss">
                <img class="d-block w-100" src="/images/slide/slide-2.jpg" alt="Second slide">
            </div>
            <div class="carousel-item @thirdSlideCss">
                <img class="d-block w-100" src="/images/slide/slide-3.jpg" alt="Third slide">
            </div>
        </div>
        <a class="carousel-control-prev" href="" role="button" data-slide="prev" @onclick="()=>Manually(true)">
            <span class="carousel-control-prev-icon" aria-hidden="true"></span>
            <span class="sr-only">Previous</span>
        </a>
        <a class="carousel-control-next" href="" role="button" data-slide="next" @onclick="()=>Manually(false)">
            <span class="carousel-control-next-icon" aria-hidden="true"></span>
            <span class="sr-only">Next</span>
        </a>
    </div>
    
    @code{
        string firstSlideCss = "active";
        string secondSlideCss = "";
        string thirdSlideCss = "";
    
        int currentPosition = 0;
        int currentSlide = 0;
    
        CancellationTokenSource cts;
        CancellationToken ct;
    
        protected override async Task OnInitializedAsync()
        {
            cts = new CancellationTokenSource();
            ct = cts.Token;
            await Walkthrough(ct);
        }
    
        public async Task Walkthrough(CancellationToken ct)
        {
            while (!ct.IsCancellationRequested)
            {
                await Task.Delay(2500, ct);
                currentPosition++;
                ChangeSlide();
                await InvokeAsync(() => this.StateHasChanged());
            }
        }
    
        public void Manually(bool backwards)
        {
            cts.Cancel();
    
            if (backwards)
                currentPosition--;
            else
                currentPosition++;
    
            ChangeSlide();
        }
    
        private void ChangeSlide()
        {
            currentSlide = Math.Abs(currentPosition % 3);
    
            switch (currentSlide)
            {
                case 0:
                    firstSlideCss = "active";
                    secondSlideCss = "";
                    thirdSlideCss = "";
                    break;
                case 1:
                    firstSlideCss = "";
                    secondSlideCss = "active";
                    thirdSlideCss = "";
                    break;
                case 2:
                    firstSlideCss = "";
                    secondSlideCss = "";
                    thirdSlideCss = "active";
                    break;
                default:
                    break;
            }
        }
    }
    
    @page/“
    @使用系统线程;
    
  • @代码{ string firstSlideCss=“活动”; 字符串secondSlideCss=“”; 字符串thirdsidecss=“”; int currentPosition=0; int currentSlide=0; 取消源cts; 取消令牌ct; 受保护的重写异步任务OnInitializedAsync() { cts=新的CancellationTokenSource(); ct=cts.Token; 等待演练(ct); } 公共异步任务演练(CancellationToken ct) { 而(!ct.iscancellationrequest) { 等待任务。延迟(2500,ct); currentPosition++; 改变幻灯片(); 等待InvokeAsync(()=>this.StateHasChanged()); } } 手动公共作废(bool向后) { cts.Cancel(); 如果(向后) 当前位置--; 其他的 currentPosition++; 改变幻灯片(); } 私有void changelide() { currentSlide=Math.Abs(当前位置%3); 开关(电流滑动) { 案例0: firstSlideCss=“活动”; 第二个slidecss=“”; 第三方CSS=“”; 打破 案例1: firstSlideCss=“”; secondSlideCss=“活动”; 第三方CSS=“”; 打破 案例2: firstSlideCss=“”; 第二个slidecss=“”; thirdsidecss=“活动”; 打破 违约: 打破 } } }
    也许这可以帮助你:@JasonD谢谢你的评论。我看到了这个链接,它需要javascript,但我需要不带javascript的解决方案,并且已经在问题陈述中提到了它。如果不想使用JavaScript,则应该考虑为Blazor专门设计的其他组件。这里有一个这样的例子: