javascript - 将 Javascript 导航控件与 Blazor 结合使用

标签 javascript c# blazor

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

是否可以访问此脚本并在页面初始化时加载它?我已将脚本放在index.html 中,并将适当的引用放在index.cshtml 的html 代码中。

我已经阅读并尝试了 JSinterop 的一些内容,但没有进展。

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

索引.html:

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

索引.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>

灰度.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 编写的 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 组件,按照我的建议进行操作,当您遇到困难时,请毫不犹豫地提出问题,并展示您的代码。

顺便说一句,您不能在 Blazor 应用程序中使用 jQuery,尽管 Boot Strap 使用了它。

希望这有帮助...

关于javascript - 将 Javascript 导航控件与 Blazor 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54971857/

相关文章:

javascript - Uglify-JS 错误 : Unexpected character '' when concatenating then minifying select2

javascript - 跨度 addClass 不工作 ajax

javascript - mmenu 未在链接页面上关闭

javascript - 这是指向鹅毛笔编辑器工具栏

c# - SplitView.PaneClosed 事件可用但不适用于 PaneOpened

bootstrap-4 - 背景和文本颜色导航栏 Blazor

c# - 开拓者导航: Update URL without changing reloading page

c# - 列表中的 LINQ Concat 子列表

c# - 如何在C#中生成RTF文档服务器端

c# - 如何在 Blazor 组件初始化中限制事件订阅