整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

js精准定位导航菜单,比瞄点定位牛逼多了

作为前端工作人员,都知道锚点是网页制作中超级链接的一种,又叫命名锚记。命名锚记像一个迅速定位器一样是一种页面内的超级链接,运用相当普遍。但是点击瞄点超链接后,发现定位不准确,不能随心所欲,这下很苦逼,,,下面的这个js定位导航菜单定位很精准,比瞄点定位好用多了,,精准度都可以自由调整。

<!Doctype html>

<html>

<head>

<meta charset="gb2312">

<title>js定位导航菜单</title>

<style type="text/css">

*{margin:0;padding:0;} .w{width:1200px;margin:0 auto;}

.nav{height:56px;margin-top:500px;margin-bottom:200px;}

.box{border:1px solid red;height:800px;margin-bottom:200px;}

.nav,#scroll_nav{width:100%;background:#7a3e47;color:#fff;position:relative;}

#scroll_nav .pubW_c{height:56px;}

#scroll_nav ul {margin-left:32px;}

#scroll_nav ul li{font-size:20px;float:left;display:inline;

width:152px;text-align:center;line-height:56px;color:#fff;}

#scroll_nav ul li a{color:#fff; width:152px;height:56px;margin:0 auto;display:block;}

#scroll_nav ul li a:hover,#scroll_nav ul li a.active{color:#7a3e47;

background:#fff;text-decoration:none;}

</style>

</head>

<body>

<div class="nav oh">

<div id="scroll_nav">

<div class="pubW_c w">

<ul class="fl">

<li><a href="javascript:void(0);">box01</a></li>

<li><a href="javascript:void(0);">box02</a></li>

<li><a href="javascript:void(0);">box03</a></li>

<li><a href="javascript:void(0);">box04</a></li>

</ul>

</div>

</div>

</div>

<div class="box w scroll_top">我是box01</div>

<div class="box w scroll_top">我是box02</div>

<div class="box w scroll_top">我是box03</div>

<div class="box w scroll_top">我是box04</div>

<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>

<script type="text/javascript">

(function($) {

$.fn.navScroll = function(o) {

o = $.extend({

navAddClass: 'cur',

conAddClass: 'posi',

navH: 60,

speedArg: 7

}, o || {});

var navAdd = o.navAddClass,conAdd = o.conAddClass,navH = o.navH,speedArg = o.speedArg;

var _el = $(this),arrPos = [],timer = null;

$('.' + conAdd + '').each(function() {

arrPos.push($(this).offset().top);

});

_el.each(function(index) {

$(this).attr('index', index);

$(this).bind('click',

function() {

$(window).unbind('scroll', WinScroll);

_el.each(function() {

$(this).removeClass(navAdd);

});

$(this).addClass(navAdd);

fnScroll($(this));

});

});

function fnScroll(obj) {

var iSpeed = 0;

var iTarget = arrPos[obj.attr('index')]-navH;

//alert(iTarget);

clearInterval(timer);

timer = setInterval(function() {

var oLength=$("#scroll_nav a").length;

var cur = $(document).scrollTop(),clientH = $(window).height(),docH = $(document).height();

//alert(cur+" "+clientH+" " +docH+" "+iTarget);

if(obj.attr('index')==oLength-1){

if((cur+clientH)>=docH){

iTarget=docH-clientH;

//alert(iTarget);

}

}

iSpeed = (iTarget - cur) / speedArg;

iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed)

if (Math.abs(iTarget - cur) < 1) {

clearInterval(timer);

window.scrollTo(0, iTarget);

$(window).bind('scroll', WinScroll);

} else {

window.scrollTo(0, cur + iSpeed);

}

},

30);

}

function WinScroll() {

var cur = $(document).scrollTop()+navH;

$.each(arrPos,

function(i) {

if (cur >= arrPos[i]) {

if (cur < arrPos[i + 1]) {

_el.each(function() {

if ($(this).attr('index') == i) {

$(this).addClass(navAdd);

} else {

$(this).removeClass(navAdd);

}

});

} else {

_el.each(function() {

if ($(this).attr('index') == arrPos.length - 1) {

$(this).addClass(navAdd);

} else {

$(this).removeClass(navAdd);

}

});

}

}

});

};

$(window).on('scroll', WinScroll);

};

})(jQuery);

$('#scroll_nav ul li a').navScroll({

navAddClass: 'active',

conAddClass: 'scroll_top',

navH: 70,

speedArg: 7

});

window.onload = window.onscroll = function() {

var oNav=document.getElementById('scroll_nav');

var oTop = document.documentElement.scrollTop || document.body.scrollTop;

//alert(oTop);

if (oTop >= 600) {

if (typeof document.body.style.maxHeight === "undefined") {

oNav.style.top = oTop + 'px';

} else {

oNav.style.position = 'fixed';

oNav.style.top = 0;

oNav.style.zIndex=999999;

}

} else {

oNav.style.position = 'absolute';

oNav.style.top = 0+"px";

}

};

</script>

</body>

</html>

效果演示地址:http://tangjiusheng.com/jstx/131.html

HTML 中,ARIA 角色(Accessible Rich Internet Applications)是一种用于提高可访问性的技术。ARIA 角色可以帮助屏幕阅读器、键盘用户和其他辅助技术正确地理解和导航网页中的结构和交互元素。

ARIA 角色是一种用于描述网页元素的方式,它可以让辅助技术更好地理解元素的功能和行为。例如,使用 aria-label 属性可以为无视力用户提供元素的描述,使用 aria-labelledby 属性可以将元素与其标签相关联,使用 aria-describedby 属性可以为元素提供描述信息等。

ARIA 角色还可以帮助键盘用户更方便地导航网页,例如,使用 aria-expanded 属性可以控制可折叠的菜单,使用 aria-haspopup 属性可以指示元素包含弹出菜单等。

使用 ARIA 角色不仅可以提高网页的可访问性,还可以让用户体验更好,因为它可以让用户更容易地理解和操作网页中的各种元素。

标题: 实现 HTML 中的 ARIA Roles: 一个简单示例

下面是一个使用 ARIA 角色的简单示例:

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>Example Page</title>

</head>

<body>

<h1>Example Page</h1>

<p>This is an example page with ARIA roles.</p>

<button aria-label="Open menu">Open menu</button>

<ul role="menu">

<li role="menuitem">Item 1</li>

<li role="menuitem">Item 2</li>

<li role="menuitem">Item 3</li>

</ul>

<p>This is some text that describes the menu.</p>

<button aria-expanded="true">Expand</button>

<ul role="menu" aria-expanded="true">

<li role="menuitem">Subitem 1</li>

<li role="menuitem">Subitem 2</li>

<li role="menuitem">Subitem 3</li>

</ul>

<p>This is some text that describes the submenu.</p>

</body>

</html>

在上述示例中,我们使用了 aria-label 属性来为按钮提供描述,使用 role="menu" 来定义菜单,使用 aria-expanded 属性来控制菜单的展开状态,同时还使用了 role="menuitem" 来定义菜单项。通过这样的方式,我们可以让屏幕阅读器和键盘用户更好地了解和操作网页中的元素。

标题: 实践中的 ARIA Roles: 提高可访问性的关键技巧

实现 HTML 中的 ARIA 角色的关键技巧包括:

1. 正确地使用 ARIA 角色:确保每个元素都有正确的 ARIA 角色,以便辅助技术可以正确地理解元素的功能和行为。

2. 使用描述性 ARIA 属性:使用 aria-label、aria-labelledby 和 aria-describedby 等属性来提供元素的描述,以便于无视力用户。

3. 控制可折叠的元素:使用 aria-expanded 属性来控制可折叠的元素,例如菜单。

4. 指定弹出菜单:使用 aria-haspopup 属性来指定元素包含弹出菜单。

5. 提高键盘导航:使用 ARIA 属性来提高键盘用户的导航体验,例如使用 tabindex 属性来定义元素的焦点顺序。

通过正确地使用 ARIA 角色和属性,我们可以让网页更具可访问性,同时也让用户体验更好。

页布局基础教程

网页的布局有很多种方式,一般分为以下几个部分:

  • 头部区域部分
  • 菜单导航区域部分
  • 内容区域部分
  • 底部区域部分

一般网页的布局

网页头部区域部分

头部区域部分位于整个网页的顶部,一般用于设置网页的标题或者网页的图标:

实例如下:


代码1


效果1


代码2


效果2

部分代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>CSS网页布局教程</title>
    <style>
        body {
            margin: 0;
        }

        /* 头部样式 */
        .header {
            background-color:darkslategrey;
            padding: 25px;
            text-align: center;
        }
        h1
        {
            color: aliceblue;
        }
    </style>
</head>
<body>
<div class="header">
    <h1>头部区域部分</h1>
</div>

</body>
</html>

菜单导航区域

菜单导航条包含了一些链接,可以引导用户浏览其他页面:


代码1


代码1


效果

实现代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>CSS 网页布局 </title>
    <style>
        * {
            box-sizing: border-box;
        }

        body {
            margin: 0;
        }

        /* 头部样式 */
        .header {
            background-color: #f1f1f1;
            padding: 20px;
            text-align: center;
        }

        /* 导航条 */
        .topnav {
            overflow: hidden;
            background-color:midnightblue;
        }

        /* 导航链接 */
        .topnav a {
            float: left;
            display: block;
            color: #f2f2f2;
            text-align: center;
            padding: 14px 16px;
            text-decoration: none;
        }

        /* 链接 - 修改颜色 */
        .topnav a:hover {
            background-color: #ddd;
            color: black;
        }
    </style>
</head>
<body>

<div class="header">
    <h1>头部区域</h1>
</div>

<div class="topnav">
    <a href="#">导航链接</a>
    <a href="#">导航链接</a>
    <a href="#">导航链接</a>
</div>

</body>
</html>

内容区域

内容区域一般形式(根据屏幕分辨率和舒适的视觉体验):

  • 1 例:用于移动端
  • 2 例:用于平板设备
  • 3 例:用于 PC 桌面设备


内容区域一般形式

创建一个响应式布局PC和以设备有不一样的布局,如下:


部分代码


PC 换显示


移送设备显示


IPad显示

实现代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>CSS 网页布局(runoob.com)</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        * {
            box-sizing: border-box;
        }

        body {
            margin: 0;
        }

        /* 头部样式 */
        .header {
            background-color: #f1f1f1;
            padding: 20px;
            text-align: center;
        }

        /* 导航条 */
        .topnav {
            overflow: hidden;
            background-color: #333;
        }

        /* 导航链接 */
        .topnav a {
            float: left;
            display: block;
            color: #f2f2f2;
            text-align: center;
            padding: 14px 16px;
            text-decoration: none;
        }

        /* 链接 - 修改颜色 */
        .topnav a:hover {
            background-color: #ddd;
            color: black;
        }

        /* 创建三个不相等的列 */
        .column {
            float: left;
            padding: 10px;
        }

        /* 左右两侧宽度 */
        .column.side {
            width: 25%;
        }

        /* 中间区域宽度 */
        .column.middle {
            width: 50%;
        }

        /* 列后面清除浮动 */
        .row:after {
            content: "";
            display: table;
            clear: both;
        }

        /* 响应式布局 - 宽度小于600px时设置上下布局 */
        @media screen and (max-width: 600px) {
            .column.side, .column.middle {
                width: 100%;
            }
        }
    </style>
</head>
<body>

<div class="header">
    <h1>头部区域</h1>
    <p>重置浏览器大小查看效果。</p>
</div>

<div class="topnav">
    <a href="#">链接</a>
    <a href="#">链接</a>
    <a href="#">链接</a>
</div>

<div class="row">
    <div class="column side">
        <h2>左侧栏</h2>
        <p>网页布局教程 - 网页布局教程</p>
    </div>

    <div class="column middle">
        <h2>主区域内容</h2>
        <p>网页布局教程 - 网页布局教程网页布局教程 - 网页布局教程网页布局教程 - 网页布局教程网页布局教程 - 网页布局教程网页布局教程 - 网页布局教程网页布局教程 - 网页布局教程网页布局教程 - 网页布局教程</p>
        <p>网页布局教程 - 网页布局教程网页布局教程 - 网页布局教程网页布局教程 - 网页布局教程网页布局教程 - 网页布局教程网页布局教程 - 网页布局教程网页布局教程 - 网页布局教程网页布局教程 - 网页布局教程</p>
    </div>

    <div class="column side">
        <h2>右侧栏</h2>
        <p>网页布局教程 - 网页布局教程</p>
    </div>
</div>

</body>
</html>

底部区域部门

底部区域部分在网页的最下方,一般包含版权信息,爬虫信息和联系方式等。


HTML代码


CSS代码


效果

实例代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>CSS 网页布局 </title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        * {
            box-sizing: border-box;
        }

        body {
            margin: 0;
        }

        /* 头部样式 */
        .header {
            background-color: #f1f1f1;
            padding: 20px;
            text-align: center;
        }

        /* 导航条 */
        .topnav {
            overflow: hidden;
            background-color: #333;
        }

        /* 导航链接 */
        .topnav a {
            float: left;
            display: block;
            color: #f2f2f2;
            text-align: center;
            padding: 14px 16px;
            text-decoration: none;
        }

        /* 链接 - 修改颜色 */
        .topnav a:hover {
            background-color: #ddd;
            color: black;
        }

        /* 创建三个相等的列 */
        .column {
            float: left;
            padding: 10px;
        }

        /* 左右两侧宽度 */
        .column.side {
            width: 25%;
        }

        /* 中间区域宽度 */
        .column.middle {
            width: 50%;
        }

        /* 列后面清除浮动 */
        .row:after {
            content: "";
            display: table;
            clear: both;
        }

        /* 响应式布局 - 宽度小于600px时设置上下布局 */
        @media screen and (max-width: 600px) {
            .column.side, .column.middle {
                width: 100%;
            }
        }

        /* 底部样式 */
        .footer {
            background-color:black;
            padding: 10px;
            text-align: center;
        }
        p
        {
        color:white;
        }
    </style>
</head>
<body>

<div class="header">
    <h1>头部区域</h1>
    <p>重置浏览器大小查看效果。</p>
</div>

<div class="topnav">
    <a href="#">链接</a>
    <a href="#">链接</a>
    <a href="#">链接</a>
</div>

<div class="row">
    <div class="column side">
        <h2>左侧栏</h2>
        <p>菜鸟教程 - 学的不仅是技术,更是梦想!</p>
    </div>

    <div class="column middle">
        <h2>主区域内容</h2>
        <p>菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!</p>
        <p>菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!菜鸟教程 - 学的不仅是技术,更是梦想!</p>
    </div>

    <div class="column side">
        <h2>右侧栏</h2>
        <p>菜鸟教程 - 学的不仅是技术,更是梦想!</p>
    </div>
</div>

<div class="footer">
    <p>底部区域</p>
</div>

</body>
</html>

下次详细讲解另一种响应式网页的实现,感谢点赞助力!


另一种响应式页面