使用Blazor的Javascript导航控件

问题描述 投票:0回答:1

我正在开发我的第一个Blazor页面。我不是UI设计师所以我主要了解C#。我根本不懂Javascript。我已经下载了一个HTML模板来帮助我完成设计部分。此模板使用Javascript在顶部导航上执行一些不错的效果。

是否可以访问此脚本并在页面初始化时加载它?我已经在index.html中添加了脚本,并在index.cshtml中的html代码中添加了相应的引用。

我已经阅读并尝试了JSinterop的一些事情,没有进展。

是否有一些相对简单的解决方案,或者它涉及很多复杂的代码JSruntime等?

index.html的:

<!-- Custom scripts for this template -->
<script src="js/grayscale.min.js"></script>

Index.cshtml:

<!-- Navigation -->
<!-- Header -->
<div id="page-top">
    <nav class="navbar navbar-expand-lg navbar-light fixed-top" id="mainNav">
        <div class="container">
            <a class="navbar-brand js-scroll-trigger" href="#pagetop">MyPage</a>
            <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation">
                Menu
                <i class="fas fa-bars"></i>
            </button>
            <div class="collapse navbar-collapse" id="navbarResponsive">
                <ul class="navbar-nav ml-auto">
                    <li class="nav-item">
                        <a class="nav-link js-scroll-trigger" href="#about">Om Travblaze</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link js-scroll-trigger" href="#projects">Verktøy</a>
                    </li>
                    <li class="nav-item">
                        <a class="nav-link js-scroll-trigger" href="#signup">Kontakt</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>

grayscale.js:

(function ($) {
  "use strict"; // Start of use strict

  // Smooth scrolling using jQuery easing
  $('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function() {
    if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
      var target = $(this.hash);
      target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
      if (target.length) {
        $('html, body').animate({
          scrollTop: (target.offset().top - 70)
        }, 1000, "easeInOutExpo");
        return false;
      }
    }
  });

  // Closes responsive menu when a scroll trigger link is clicked
  $('.js-scroll-trigger').click(function() {
    $('.navbar-collapse').collapse('hide');
  });

  // Activate scrollspy to add active class to navbar items on scroll
  $('body').scrollspy({
    target: '#mainNav',
    offset: 100
  });

  // Collapse Navbar
  var navbarCollapse = function() {
    if ($("#mainNav").offset().top > 100) {
      $("#mainNav").addClass("navbar-shrink");
    } else {
      $("#mainNav").removeClass("navbar-shrink");
    }
  };
  // Collapse now if page is not at top
  navbarCollapse();
  // Collapse the navbar when page is scrolled
  $(window).scroll(navbarCollapse);

})(jQuery); // End of use strict
javascript c# blazor
1个回答
2
投票

这里有一个类似的问题,关于使用纯粹用JavaScript编写的TreeView。我建议使用C#重写TreeView,实际上,用户将TreeView转换为Razor组件,而不使用单行JavaScript。这就是你应该做的......你不应该嵌入或使用JavaScript模板......而应该将它转换为组件,它们通过C#相互交互。仅在不可避免的情况下使用JSInterop。请记住,Blazor的目标是使用C#而不是JavaScript。现在C#(Web Assembly)可以通过JavaScript与DOM通信,但这不会永远持续下去。预计在未来几年内,Web Assembly可能会直接与DOM进行通信,这会使JavaScript的使用过时。现在没有严格观察到的模式应该如何构建Blazor应用程序,但有一点是不言而喻的:只有在不可避免的情况下才使用JavaScript Inter-op ...用C#,Razor等创建组件如果你认真学习Razor Components,做我的建议,当你卡住时,不要犹豫,提出问题,展示你的代码。

顺便说一下,你不能在你的Blazor应用程序中使用jQuery,即使它被Boot Strap使用。

希望这可以帮助...

© www.soinside.com 2019 - 2024. All rights reserved.