javascript - 单页网站方法

标签 javascript jquery html

我目前正在开发一个网站,我想收集专家的意见,以了解我的方向是否正确,因为在开始开发之前我对网页设计的知识几乎为零几天前。我希望问题不要太模糊,可以用事实来支持,而不仅仅是“意见”

至于互联网上的众多网站,我的网站具有所有页面共享的永久页眉和页脚。因此,当我反射(reflection)如何设计网站时,我想到了两个选择:

  1. 创建我将在每个页面中重新导入的 HTML 页眉和页脚
  2. 创建一个带有页眉和页脚的模板页面,并仅导入/修改该页面中的内容(在我的例子中是在“标签”部分)。

无论错误还是正确,我选择了第二个选项,因为我认为它更有意义并且实际上简化了“内容 HTML 文件”,因为它基本上只需要包含实际文章。我还认为这会带来更简洁的方法和更流畅的导航体验,因为在从一篇文章切换到另一篇文章时不会观察到页面转换(实际上整个浏览体验是在一个页面中完成的)。

但是,此解决方案有其自身的问题。比如,URL不变,如何通过URL分享一篇文章给 friend ?不可能......因此,我实现了一个变通解决方案。这个想法很简单:通过附加一些参数来修改 URL。它工作正常,但我想知道它是否没有被过度杀伤。此外,我担心每当修改 URL 时页面实际上都会刷新(只是为了更改一个参数......)。是这样吗?

这是我的脚本。如果没有参数传递给 URL,网站将以英文显示主页并将这些参数添加到 URL(page=home 和 lang=en)。然而,我注意到页面使用这种方法加载了两次......(当我如上所述修改 URL 时它被重新加载......)。我怎样才能避免这种行为?

<script>
    $(document).ready(function() {
        var params, mainUrl;
        mainUrl = window.location.href;
        params = window.location.search.substr(1);

        if (!params) { //if params is empty
            linkName = "home-en";
            window.location.href = mainUrl + "?page=home&lang=en";
        } else {
            var n = params.search("page=") + 5;
            var m = params.search("&lang=");
            linkName = params.substr(n, m - n);
            lang = params.substr(m + 6);
        }
        $('#' + lang).addClass('selected');
        document.body.className = lang;
        document.body.className = 'en'

        $("#included-content").load(linkName + "-" + lang + ".html");

        $('.link').click(function(element) {
            newLinkName = $(this).attr('id');

            window.location.href = mainUrl.replace("page=" + linkName, "page=" + newLinkName);
            $("#included-content").load(linkName + "-" + lang + ".html");

            return false;
        });

        var buttons = $('#languages button');
        buttons.on('click', function(e) {
            buttons.removeClass('selected');
            $(this).addClass('selected');
            var newlang = $(this).attr('id');
            window.location.href = mainUrl.replace("&lang=" + lang, "&lang=" + newlang);

            $("#included-content").load(linkName + "-" + lang + ".html");
        });
    });
</script>

这是正文:

<body>
    <div id="wrapper">
        <header>
            <h1> Title</h1>
            <div id="languages">
                <button id="en" type="button" onclick="document.body.className = 'en'">En</button>
                <button id="fr" type="button" onclick="document.body.className = 'fr'">Fr</button>
            </div>
        </header>
        <nav>
            <ul lang="en">
                <li><a href="" class="link" id="home">Home</a></li>
                <li><a href="" class="link" id="books">Books</a></li>
                <li><a href="" class="link" id="articles">Articles</a></li>
                <li><a href="" class="link" id="biography">Bio</a></li>
            </ul>
            <ul lang="fr">
                <li><a href="" class="link" id="home">Accueil</a></li>
                <li><a href="" class="link" id="books">Livres</a></li>
                <li><a href="" class="link" id="articles">Articles</a></li>
                <li><a href="" class="link" id="biography">Bio</a></li>
            </ul>
        </nav>
        <section>
            <div id="included-content"></div>
        </section>
        <footer>
            <p> Author &copy; all rights reserved</p>
        </footer>
    </div>
</body>

列表中的 id 与 HTML 文件共享其名称(例如 home-fr.html 或 biography-en.html)。

所以,我的问题基本上是要知道这是否是一种不错的方法,以及它是否在“真实网站应用程序”中以类似方式完成?我知道要处理网站语言,将参数传递给 URL 是正确的方法,但我担心它会使页面的所有内容过于复杂。我还想知道它是否真的在导航体验方面提供了优势。我在想,也许现在当从一个页面更改到另一个共享相同页眉和页脚的页面时,浏览器能够将它们保留在页面上,而不需要删除然后重新绘制它们。

我希望我能够清楚地说出我的想法。这种方法可行吗?

最佳答案

例如,您应该尝试在 url 中使用散列 #,以便您的应用程序知道您要查找的 url

example.com/#/share/post/546

使用 javascript 可以通过

window.location.hash

所以你只需将它传递给你的应用程序

例如

var url = window.location.hash;
//jquery script
jQuery('#appbody').load(url);

我希望这个见解对您有所帮助,因为这将停止任何可能的刷新并允许共享链接

关于javascript - 单页网站方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48188867/

相关文章:

php - 从 Controller JSON 传递一个值以在 CodeIgniter 中查看 Ajax

c++ - 需要 Webkit 和 C++ 示例代码来从文件中读取和显示 HTML

HTML 导航未按预期工作

javascript - 在特定的 optgroup 中选择一个值

javascript - Android Phonegap 3 webapp 白名单不起作用

javascript - 如何使用 prevAll() 更改文本框文本

javascript - 如何使用 jquery 将输入复制到子输入?

javascript - HTML5 Canvas 中的居中(比例字体)文本

javascript - 使用 JavaScript 更改字符串

javascript - HTML 元素在导航到页面时消失,在页面刷新时重新出现