首页 > 解决方案 > 为什么单击锚链接后我的 jscript 开始出错

问题描述

我的网站的 jscript 中有一个错误。重现它的方法是单击静态标题中的链接。多次单击链接后,滚动时,您在滚动时将其放在锚上,它变得非常有问题,滚动令人难以忍受。

我能做些什么来解决这个问题?先感谢您

这是我的代码:

$(window).load(function(){
    
    $(window).scroll(function() {
        var hT = $('#scroll-to').offset().top,
        hH = $('#scroll-to').outerHeight(),
        wH = $(window).height(),
        wS = $(this).scrollTop();
        if (wS > (hT+hH-wH) && (hT > wS) && (wS+wH > hT+hH)){
            $('#static-bar').addClass('view2')
        }
        else {
            $('#static-bar').removeClass('view2');
        }
    });
});

$(window).load(function() {
      
    function isScrolledIntoView(elem) {
        var docViewTop = $(window).scrollTop();
        var docViewBottom = docViewTop + $(window).height();
    
        var elemTop = $(elem).offset().top;
        var elemBottom = elemTop + $(elem).height();
    
        return ((elemBottom <= docViewBottom) && (elemTop >= docViewTop));
    }
    
    $(window).scroll(function (e) {
        var anchors = $('.selector');
        for (var i = 0; i < anchors.length; ++i) {
            if (isScrolledIntoView(anchors[i])) {
                var href = $(anchors[i]).attr('href');
                location.hash = href.slice(href.indexOf('#') + 1);
                break;
            }
        }
    });
    
    $(window).scroll(function () {
        if (window.location.href.indexOf("home") != -1)
        {
            document.querySelectorAll("#static-bar a[href='#home']")[0].setAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#about']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#services']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#method']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#contact']")[0].removeAttribute("class", "dlines");
        }
        if (window.location.href.indexOf("about") != -1)
        {
            document.querySelectorAll("#static-bar a[href='#home']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#about']")[0].setAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#services']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#method']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#contact']")[0].removeAttribute("class", "dlines");
        }
        if (window.location.href.indexOf("services") != -1)
        {
            document.querySelectorAll("#static-bar a[href='#home']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#about']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#services']")[0].setAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#method']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#contact']")[0].removeAttribute("class", "dlines");
        }
        if (window.location.href.indexOf("method") != -1)
        {
            document.querySelectorAll("#static-bar a[href='#home']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#about']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#services']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#method']")[0].setAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#contact']")[0].removeAttribute("class", "dlines");
        }
        if (window.location.href.indexOf("contact") != -1)
        {
            document.querySelectorAll("#static-bar a[href='#home']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#about']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#services']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#method']")[0].removeAttribute("class", "dlines");
            document.querySelectorAll("#static-bar a[href='#contact']")[0].setAttribute("class", "dlines");
        }
    });

    $(function () {
        var hash = location.hash;
        if (hash) {
            // Scroll to the element with the given hash.
            var anchors = $('.selector');
            for (var i = 0; i < anchors.length; ++i) {
                if ($(anchors[i]).attr('href') === hash) {
                    $(window).scrollTop($(anchors[i]).offset().top);
                    break;
                }
            }
        }
    });   
});

function home() {
    document.querySelectorAll("a.link[href='#home']")[0].setAttribute("id", "home");
    document.querySelectorAll("a.link[href='#home']").removeAttr('id');
    document.querySelectorAll("a.link[href='#about']").removeAttr('id');
    document.querySelectorAll("a.link[href='#services']")[0].removeAttr('id');
    document.querySelectorAll("a.link[href='#method']")[0].removeAttr('id');
    document.querySelectorAll("a.link[href='#contact']")[0].removeAttr('id');
}
function about() {
    document.querySelectorAll("a.link[href='#about']")[0].setAttribute("id", "about");
    document.querySelectorAll("a.link[href='#home']").removeAttr('id');
    document.querySelectorAll("a.link[href='#about']").removeAttr('id');
    document.querySelectorAll("a.link[href='#services']")[0].removeAttr('id');
    document.querySelectorAll("a.link[href='#method']")[0].removeAttr('id');
    document.querySelectorAll("a.link[href='#contact']")[0].removeAttr('id');
}
function services() {
    document.querySelectorAll("a.link[href='#services']")[0].setAttribute("id", "services");
    document.querySelectorAll("a.link[href='#home']").removeAttr('id');
    document.querySelectorAll("a.link[href='#about']").removeAttr('id');
    document.querySelectorAll("a.link[href='#services']")[0].removeAttr('id');
    document.querySelectorAll("a.link[href='#method']")[0].removeAttr('id');
    document.querySelectorAll("a.link[href='#contact']")[0].removeAttr('id');
}
function method() {
    document.querySelectorAll("a.link[href='#method']")[0].setAttribute("id", "method");
    document.querySelectorAll("a.link[href='#home']").removeAttr('id');
    document.querySelectorAll("a.link[href='#about']").removeAttr('id');
    document.querySelectorAll("a.link[href='#services']")[0].removeAttr('id');
    document.querySelectorAll("a.link[href='#method']")[0].removeAttr('id');
    document.querySelectorAll("a.link[href='#contact']")[0].removeAttr('id');
}
function contact() {
    document.querySelectorAll("a.link[href='#contact']")[0].setAttribute("id", "contact");
    document.querySelectorAll("a.link[href='#home']").removeAttr('id');
    document.querySelectorAll("a.link[href='#about']").removeAttr('id');
    document.querySelectorAll("a.link[href='#services']")[0].removeAttr('id');
    document.querySelectorAll("a.link[href='#method']")[0].removeAttr('id');
    document.querySelectorAll("a.link[href='#contact']")[0].removeAttr('id');
}
/*============== Font ==============*/

/*Raleway*/
@font-face {
	font-family: 'Raleway';
	src: url(../fonts/font.woff2) format('woff2');
}

/*Icons*/

@font-face {
	font-family:'FontAwesome';
	src: url('../fonts/iconfont.woff2');
}

/*========= Main Elements ==========*/

/*Html & Body*/

html, body {
    font-size: 14px;
    width: device-width;
	margin: 0 0 0 0;
    font-weight: 400;
    width: 100%;
    font-family: 'Raleway', sans-serif;
}

/*All*/

*,
*:before,
*:after {
    box-sizing: border-box;
}

/*Links !a*/

a,
a:hover,
a:active,
a:focus {
    text-decoration: none;
	outline: none;
}

/*Headers !h1 !h2 !h3 !h4 !h5 !h6*/

h1, h2, h3, h4, h5, h6 {
    margin: 0;
    font-family: 'Raleway', sans-serif;
    color: #1a1a1a;
    margin-bottom: 10px;
}
h1 {
    font-size: 3rem;
    line-height: 4rem;
}

/*img !img*/

img {
    -moz-user-select: none;
    -webkit-user-select: none;
    -ms-user-select: none;
    -user-select: none;
    -webkit-user-drag: none;
    -user-drag: none;
	max-width: 100%;
}

/*ul !ul*/

ul {
	list-style: none;
}

strong {
	font-family: "brandon", brandon, helvetica, sans-serif;
}

article {
	margin-left: auto;
	margin-right: auto;
	text-align: center;
	max-width: 580px;
	font-size: 18px;
	color: #00D2AD;
	margin-bottom: 30px;
}

/*hr !hr*/

hr {
	border: solid 1px #e0e0e0;
	display: block;
	margin-left: 6%;
	margin-right: 6%;
}

/*=============== Id ===============*/


#home {
	margin-left: 0%;
}

/*Box*/

#box {
	width: 100%;
	height: 30vw;
	margin-top: 1%;
	margin-bottom: 2.5%;
	background-image: url("../images/blur.jpg");
	-webkit-background-size: cover;
	-moz-background-size: cover;
	-o-background-size: cover;
	background-size: cover;
	border: 1px solid #00D2AD;
}
#box img {
	display: block;
    margin-left: auto;
    margin-right: auto;
	width: 15%;
}
#box h1 {
	text-align: center;
}

/*Icon setting*/

div#a > a {
	float: right;
	font-size: 17px;
	margin-top: -1%;
	padding-right: 0.8%;
	padding-left: 0.8%;
	padding-top: 1%;
	padding-bottom: 1%;
	overflow: hidden;
}
div#a > a:hover {
    background-color: white;
    color:#00D2AD;
}

/*static-bar*/

#static-bar {
	position: fixed;
	width: 100%;
	top: 0;
	left: 0;
	text-align: center;
	background-color: #00D2AD;
	transition: all 3s;
}
#static-bar div#a > a {
	float: right;
	font-size: 17px;
	padding: 27.5px 15px 27.5px 15px;
}
#static-bar nav > ul > li > a {
	font-size: 17px;
	font-weight: 300;
	margin-left: 50px;
	color: white;
	transition: 0.1s;
}
#static-bar nav > ul > li {
	margin-left: 15%;
	margin-top: 1.6%;
}
#static-bar div#a > a {
	float: right;
	font-size: 17px;
}
#static-bar div#a > a:hover {
    background-color: white;
    color:#00D2AD;
}
#static-bar div#a {
	font-family: FontAwesome;
	font-style: normal;
	font-size: 15px;
}

.static-logo {
	margin-top: -0.5%;
	margin-left: 1%;
	float: left;
	width: 60px;
}

/*margin*/

#mrg-c {
	margin-left: 200px;
}

#mrg-c img {
	margin-left: -500px;
}

#margin {
	margin-left: 50px;
	margin-right: 65px;
}
#break {
	width: 3%;
}

#b-mgr {
	margin-bottom: 30px;
}

#mtd {
	width: 650px;
}

#bottom-image {
	width: 300px;
}

/*Subject header lines*/

#header-lines {
	overflow: hidden;
	text-align: center;
}
#header-lines h1:before, #header-lines h1:after {
	background-color: #e0e0e0;
	content: "";
	display: inline-block;
	height: 2px;
	position: relative;
	vertical-align: middle;
	width: 100px;
	z-index: -1;
}
#header-lines h1:before {
	right: 0.5em;
	margin-left: -50%;
}
#header-lines h1:after {
	left: 0.5em;
	margin-right: -50%;
}

/*============= Class ==============*/

/*static-bar class*/

.view2 {
	display: none;
}

.dlines {
	padding-top: 10px;
	padding-bottom: 10px;
	border-top: 2px solid white;
	border-bottom: 2px solid white;
}

/*url link class*/

.link {
    display: block;
    position: relative;
    top: -80px;
    visibility: hidden;
}

/*top-logo*/

.top-logo {
	margin-top: 25px;
	margin-bottom: 25px;
	width: 400px;
	height: auto;
	display: block;
	margin-left: auto;
	margin-right: auto;
}


/*============= Header =============*/

/*header !section*/

header > section {
	overflow: hidden;
	background-color: #00D2AD;
	height: 46px;
}

header > section > ul > li {
	font-family: FontAwesome;
	font-style: normal;
	font-size: 15px;
}

/*section !a !ul*/

section > ul > li > a {
	float: left;
    font-size: 15px;
	font-weight: 600;
	
}
section a {
	color: white;
}

section > ul {
	margin-left: 5%;
}

/*nav !nav !a !target*/

header nav {
	padding-top: 5px;
	padding-bottom: 5px;
	text-align: center;
}

header nav > ul > li a {
	color: #777;
	font-weight: 600;
	text-align: center;
	margin-left: 5%;
}

header nav > ul > li a:target {
	color: #00D2AD;
	transition: all 0.65s;
}

header span {
	margin-left: 0.8vw;
	font-family: arial;
}

header a.mail {
	margin-left: 4%;
}

/*============== Main ==============*/

/*main*/

main {
	margin-left: 6%;
	margin-right: 6%;
	line-height: 1.5;
}

/*table*/

table {
	width: 100%;
	border: 0;
	margin-bottom: 50px;
}

td {
	width: 300px;
}

main span {
	font-weight: 1;
	font-family: Arial, Helvetica, sans-serif;
}

table a {
	color: blue;
}

/*IE10 in Windows 8 and Windows Phone 8 Bug fix*/

@-webkit-viewport { width: device-width; }
@-moz-viewport { width: device-width; }
@-ms-viewport { width: device-width; }
@-o-viewport { width: device-width; }
@viewport { width: device-width; }

/*Header icon classes*/

.lang:before {content: "\0045 \004E \0047";}
.mail:before {content:"\f003";}
.phone:before {content:"\f095";}
.twitter:before {content:"\f099";}
.facebook:before {content:"\f09a";}
.google:before {content:"\f0d5";}
.linkedin:before {content:"\f0e1";}
.dribbble:before {content:"\f17d";}
.behance:before {content:"\f1b4";}
<!doctype html>
<html class="no-js" lang="en">
    <head>
        <meta charset="utf-8">
        <title>Garbrant Consulting</title>
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="icon" type="image/ico" href="assets\images\logo-icon.ico">

        <link rel="stylesheet" href="assets/css/style.css">
        
			<link rel="stylesheet" href="style.css">
        <script src='http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'></script>
        <script type="text/javascript" src="jquery-1.8.3.js"></script>

			<script src="script.js"></script>
        <script src="assets/js/scroll.js"></script>
    </head>
    <body>
        
        <header>
            <section>
                <ul>
                    <li>
                        <a href="tel:012-345 67 89"><span>012-345 67 89</span></a>
                        <a href="mailto:mail@example.com"><span>mail</span></a>
                    </li>
                </ul>
            </section>
            <a href="" class="top-logo">
            </a>

            <a class="link" href="#home"></a>
            <a class="selector"></a>
            <hr>
            
            <nav>
                <ul>
                    <li>
                        <a href="#home" onclick="home()">Hem</a>
                        <a href="#about" onclick="about()">Om</a>
                        <a href="#services" onclick="services()">Tjänster</a>
                        <a href="#method" onclick="method()">Metod</a>
                        <a href="#contact" onclick="contact()">Kontakt</a>
                    </li>
                </ul>
            </nav>
            <hr id="scroll-to">
        </header>

        <div id="static-bar" class="view2">
            <section id="margin">
                <ul>
                    <li>
                    </li>
                </ul>
            </section>
            <nav>
                <ul>
                    <li>
                        <a href="#home" onclick="home()">Hem</a>
                        <a href="#about" onclick="about()">Om</a>
                        <a href="#services" onclick="services()">Tjänster</a>
                        <a href="#method" onclick="method()">Metod</a>
                        <a href="#contact" onclick="contact()">Kontakt</a>
                    </li>
                </ul>
            </nav>
        </div>

        <br>
		<main>
            <div id="box">
                <br><br>
                <img src="assets\images\cik.png">
                <h1>Hej</h1>

            </div>

            <!--About--> 
            <a class="link" href="#about"></a>
            <div id="header-lines">
                <h1>Om</h1>
            </div>

            <table>
                <tbody>
                    <tr>
                        <article class="selector" href="#about">
                            <p>Garbrant Consulting är ett konsultföretag som erbjuder tjänster inom mat, dryck och hotell. Garbrant Consulting ägs och drivs av Ulrika Garbrant, civilekonom och projektledare med mångårig branscherfarenhet på strategisk och operativ nivå.</p>
                        </article>
                        <td valign="top">
                                <p>Garbrant Consulting skriver regelbundet artiklar i den internationella branschtidningen Foodservice Europe &amp; Middle East. Garbrant Consulting rapporterar om den Nordiska restaurangmarknaden (Sverige, Norge, Danmark, Finland) med aktuell branschfakta, trender och intervjureportage.<b></a></p>
                            <p>Garbrant Consulting vänder sig till företag och organisationer inom hotell-, restaurang- och måltids-branschen. Målgruppen består också av företag som på olika sätt har anknytning till mat och dryck, t ex fastighetsbolag, reseföretag, upplevelseföretag, friskvårdsföretag.<br>
                                Våra tjänster inkluderar konceptutveckling, analyser, strategier, strukturkapital, utbildning mm. <br /><a href="#services"> Läs mer om Tjänster.</a></p>
                        </td>
                        <td id="break"></td>
                        <td valign="top">
                            <p>Exempel på kundföretag: Scandic Hotels, Mat på Jobbet, Ballbreaker, Fritidsresor, Espresso House, Max Hamburger-restauranger, Medley, 8t8, Convini, Stöten i Sälen m fl.</p>
                            <p>Vi tror på kombinationen passion, struktur och affärsmässighet för bästa resultat. Garbrant Consulting kan stärka uppdragsgivaren på en eller flera av dessa punkter. <br><a href="#method">Läs mer om Metod.</a></p>
                        </td>
                    </tr>
                </tbody>
            </table>

            <!--Services--> 
            <a class="link" href="#services"></a>
            <div id="header-lines">
                <h1>Tjänster</h1>
            </div>

            <table>
                <tbody>
                    <tr>
                        <article class="selector" href="#services">
                            <p>Garbrant Consulting erbjuder tjänster inom en rad områden, som rådgivare, projektledare eller resurs i en arbetsgrupp:</p>
                        </article>
                        <td valign="top">
                            <p><strong>Konceptutveckling</strong><br>Ett koncept är en helhet med många beståndsdelar. Garbrant Consulting kan bidra med kreativitet, marknadskännedom, trendkänsla, specialistkunskap och ett strukturerat arbetssätt för att utforma alla detaljer i konceptet. Garbrant Consulting kan även utvärdera befintliga koncept och utforma förbättringsförslag.</p>
                            <p><strong>Analyser</strong><br>En analys kan vara ett avgränsat projekt, t ex en kvalitetsutvärdering, marknadskartläggning eller trendrapport. Ofta är analysen en del i ett större projekt, t ex en förstudie inför ett strategiarbete eller ett underlag för konceptutveckling.</p>
                            <p><strong>Strategiarbete</strong><br>Vision, affärsidé, mål, vägval och strategier - Garbrant Consulting kan hjälpa er att skapa en strategisk plan för ert företag, affärsområde eller avdelning. Exempelvis är utvecklingen av en affärsplan en intern process som kan förstärkas och effektiviseras med Garbrant Consultings hjälp. Garbrant Consulting kan också fungera som bollplank och kritisk granskare av föreslagna strategier.</p>
                        </td>
                        <td id="break"></td>
                        <td valign="top">
                            <p id="b-mgr"><strong>Strukturkapital</strong><br>Ett företags strukturkapital är  dess samlade dokumentation av policies, koncept, arbetssätt  och rutiner. Syften med att skapa strukturkapital är kvalitetssäkring,  effektivisering av processer och daglig drift, konceptsäkring vid  expansion, uppföljning av prestationer mm. Ett väl utformat  strukturkapital ökar värdet på företaget. Ofta fungerar ett  strukturprojekt som en arbets- och utvecklingsprocess då det ibland  uppdagas att alla policies, konceptdetaljer och rutiner inte  är satta. Därför krävs en erfaren och kvalificerad projektledare för  att nå ett bra slutresultat. Exempel på slutprodukter:  Konceptbeskrivning, Driftsmanual, Franchisehandbok,  Utbildningsprogram.</p>
                            <p><strong>Artiklar</strong><br>Garbrant Consulting skriver regelbundet  artiklar i den internationella branschtidningen Foodservice Europe &amp;  Middle East. Garbrant Consulting rapporterar om den Nordiska  restaurangmarknaden (Sverige, Norge, Danmark, Finland) med aktuell  branschfakta, trender och intervjureportage. Andra skrivuppdrag kan  diskuteras.</p>
                        </td>
                    </tr>
                </tbody>
            </table>

            <!--Method--> 
            <a class="link" href="#method"></a>
            <div id="header-lines">
                <h1>Metod</h1>
            </div>
            <table>
                <tbody>
                    <tr>
                        <article class="selector" href="#method"><p>Garbrant Consulting värdesätter ett nära och öppet samarbete med uppdragsgivaren.  Tillsammans åstadkommer vi det bästa resultatet.</p></article>
                        <td valign="top" id="mtd">
                            <p><strong>Arbetssätt<br></strong>En projektgrupp sätts samman bestående av Garbrant Consulting och en eller flera representanter från ert företag. Roller och ansvarsfördelning bestäms i uppstartfasen. Beroende på uppdragets art och vilka interna resurser som kan tillsättas, väljer ni som uppdragsgivare hur mycket ni deltar. Garbrant Consulting konsult kan anta rollen som projektledare eller producerande resurs i en arbetsgrupp som ni själva tillsatt.</p>
                            <p>Vi tror på kombinationen passion, struktur och affärsmässighet för bästa resultat. Garbrant Consulting kan stärka uppdragsgivaren på en eller flera av dessa punkter.</p>
                            <p>Begreppet passion innefattar både kreativitet, kunskap, vilja och drivkraft. Den brukar vara en stark faktor hos entreprenören, som kanske i första hand behöver hjälp med struktur. I en större organisation finns ofta en högre grad av struktur och affärsmässighet men kanske ett behov av en utomståendes drivkraft, kunskap och kreativitet.  Ibland är uppdragsgivaren stark på alla tre punkter men saknar helt enkelt tid och interna resurser för ett önskat projekt.</p>
                            <p><strong>Vad behöver ni hjälp med? </strong><br><a href="#contact">Kontakta oss</a></p>
                        </td>
                        <td id="break"></td>
                        <td valign="top"><img alt="bubblor (passion, struktur, affärsmässighet)" src="assets/images/bubbles.jpg">
                        </td>
                    </tr>
                </tbody>
            </table>

            <!--Contact-->
            <a class="link" href="#contact"></a>
            <div id="header-lines">
                <h1>Kontakt</h1>
            </div>
            <div>
                <article class="selector" href="#contact"><p>Välkommen att höra av dig.</p></article>
                <p><strong>Har du frågor om Garbrant Consulting och våra tjänster?</strong></p>
                <p>
                    <li>Vill du veta mer eller boka tid för ett möte?</li>
                    <li>Söker du samarbete?</li>
                    <li>Vill du diskutera en idé?</li>
                </p>
                <p><strong>Ulrika Garbrant</strong><br>
                    Tel: <a href="tel:012-345 67 89"><span>012-345 67 89</span></a><br>
                    E-post: <a href="mailto:mail@example.com">ulrika@garbrantconsulting.se</a>
                </p>
                <span><img alt="bild på person" src="assets/images/stand.png" id="bottom-image"></span>
            </div>
        </main>
    </body>
</html>

标签: javascriptjqueryhtmlcssjscript

解决方案


由于这两行,您的 JS 错误:

var href = $(anchors[i]).attr('href');
location.hash = href.slice(href.indexOf('#') + 1);

直接相邻(下方)的锚标记<a href="#home">没有 href 属性。因此,您的 JS 在href.slice声明中窒息。

要解决此问题,您可能应该组合两个相邻的锚点。

所以改变:

       <a class="link" href="#home"></a>
       <a class="selector"></a>

       <a class="selector link" href="#home"></a>

推荐阅读