需求:

  当页面是由一个巨大的表格构成时,浏览器自动会出现纵向和横向滚动条,这时用户浏览页面会出现很蛋疼的感受,那就是恶心的横向滚动条!

为了减缓这种蛋疼的感觉,我尝试做了这个导航器(不知道如何称呼),类似于地图右下角的缩略图,更形象的说是类似于“英雄联盟”的右下角小地图。

Demo:

点我Demo

大致原理:

根据鼠标在小地图区域的位置,成比例的放大到整个HTML页面中去。然后通过控制滚动条位置,实现页面移动。

更详细原理:

根据HTML页面的长宽比,在右下角创建相同比例的div,然后侦听该div的mouseover和mousemove事件,由此得到鼠标在

小地图中的x,y坐标(以小地图左上角为坐标原点)。再根据鼠标在小地图的位置成比例的放大到页面中,通过JQuery的

$("xxx").animate({scrollTop:123,scrollLeft:456},0),设置滚动条距离顶端123px,左端456px,动画时间为0,即可达到

类似于手动拖拽的效果。(没有弹性回馈,有了更好玩)

主要JQuery函数: 

$().outerHeight()
    $().css()
    $().mouseover()
    $().mousemove()
    $().animate()

注:代码中的BirdSkan,翻译自中文“鸟瞰”图,后来觉得这个东西不符合“鸟瞰图”,而在文字叙述中国改为小地图,因为它
更类似于游戏“英雄联盟”或“百度地图”右下角的小地图。但代码中命名未改动,依旧是BirdSkan,其中Q是个人姓氏拼音。

效果图:

<!DOCTYPE html>
<html>
 <head>
  <title> 测试JS鸟瞰图 </title>
  <meta charset="utf-8" />
  <link rel="stylesheet" href="" type="text/css"  />
  <style type="text/css">
    body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, form,
    fieldset, legend, input, button, textarea, p, th, td { margin: 0;padding: 0;    }
    p{margin:100px;    }
  </style>
     <script src="js/jquery-1.10.2.min.js" type="text/javascript"></script>
  <script type="text/javascript">
    $(document).ready(function(){

        //author: qilei
        //  date: 2014-04-15
        //  todo: 边缘需要优化

        var domEle = "body";            // .class  or  #id  or tagname, but 

        var birdSkanHeight,birdSkanWidth;
        var maxBSHeight = 250;
        var minBSHeight = 100;
        var maxBSWidth = 250;
        var minBSWidth = 100;

        var pageHeight = $("body").outerHeight();
        var pageWidth = $("body").outerWidth();

        var QBirdSkan = $("<div id='QBirdSkan'></div>");
        //根据页面比例确定鸟瞰图长宽
        var shape =  (pageHeight)/(pageWidth);
        if( shape > 1 || shape == 1 ){
            birdSkanHeight = maxBSHeight;
            birdSkanWidth = birdSkanHeight / shape;
            birdSkanWidth < minBSWidth ? birdSkanWidth  = minBSWidth : birdSkanWidth;//若计算出的宽度过小,用最小宽度代替
        }else{
            birdSkanWidth = maxBSWidth;
            birdSkanHeight = birdSkanWidth * shape;
            birdSkanHeight < minBSHeight ? birdSkanHeight = minBSHeight : birdSkanHeight;//同上
        }

        QBirdSkan.css("position","fixed");
        QBirdSkan.css("bottom","0");
        QBirdSkan.css("right","0");

        QBirdSkan.css("height",birdSkanHeight);
        QBirdSkan.css("width",birdSkanWidth);
        QBirdSkan.css("background-color","rgb(D3D3D3)");
        QBirdSkan.css("filter","alpha(opacity=20)");//IE,透明度20%
        QBirdSkan.css("-moz-opacity","0.8)");//Moz+FF,透明度20%
        QBirdSkan.css("opacity","0.2)");//支持CSS3的浏览器,透明度20%

        //设计美化
        QBirdSkan.css("border","solid 8px rgb(230,230,230) ");
        QBirdSkan.css("cursor","pointer");

        $("body").append(QBirdSkan);

        //添加鼠标移动相应函数
        QBirdSkan.mouseover(function(event){

            QBirdSkan.mousemove(function(event){
                //根据鸟瞰图中鼠标位置滚动页面位置
                var vRatio = event.offsetX / birdSkanWidth;
                var hRatio = event.offsetY / birdSkanHeight;

                var pageScrollTopVal = pageHeight * hRatio;
                pageScrollTopVal > pageHeight ? pageScrollTopVal = pageHeight : pageScrollTopVal;

                var pageScrollLeftVal = pageWidth * vRatio;
                pageScrollLeftVal > pageWidth ? pageScrollLeftVal = pageWidth : pageScrollLeftVal;

                $("html,body").animate({scrollTop:pageScrollTopVal,scrollLeft:pageScrollLeftVal},0);
            })

        });

    })

  </script>
 </head>

 <body>
    <div>

<p>1.鼠标进入有个矩形框,移动即移动页面</p>
<p>2.鼠标进入有个矩形框,移动即移动页面</p>

     <p>3.鼠标进入有个矩形框,移动即移动页面</p>
     <p>4.鼠标进入有个矩形框,移动即移动页面</p>

     <p>5.鼠标进入有个矩形框,移动即移动页面</p>

<p>6.鼠标进入有个矩形框,移动即移动页面</p>

<p>7.鼠标进入有个矩形框,移动即移动页面</p>

<p>8.鼠标进入有个矩形框,移动即移动页面</p>
<p>9.鼠标进入有个矩形框,移动即移动页面</p>

<p>10.鼠标进入有个矩形框,移动即移动页面</p>

<p>11.鼠标进入有个矩形框,移动即移动页面</p>

<p>12.鼠标进入有个矩形框,移动即移动页面</p>
<p>13.鼠标进入有个矩形框,移动即移动页面</p>

<p>14.鼠标进入有个矩形框,移动即移动页面</p>
<p>15.鼠标进入有个矩形框,移动即移动页面</p>

<p>16.鼠标进入有个矩形框,移动即移动页面</p>
<p>17.鼠标进入有个矩形框,移动即移动页面</p>
<p>18.鼠标进入有个矩形框,移动即移动页面</p>

<span>=====================================================</span>
<p>1.鼠标进入有个矩形框,移动即移动页面</p>

<p>2.鼠标进入有个矩形框,移动即移动页面</p>

<p>3.鼠标进入有个矩形框,移动即移动页面</p>

<p>4.鼠标进入有个矩形框,移动即移动页面</p>
<p>5.鼠标进入有个矩形框,移动即移动页面</p>

<p>6.鼠标进入有个矩形框,移动即移动页面</p>

    </div>
 </body>
</html>

自己做的网页页面导航浏览JS/JQuery的更多相关文章

  1. 自己做的网页页面导航浏览JS/JQuery_版本2(优化边缘)

    版本2增加了宽宽的边界,边界内鼠标也可以导航.边界对应这HTML页面的边界.目前右下角有时会导致功能失效.版本1. 这次找了个更好的例子,实践中产生这个需求的真实例子,点我Demo. 需求: 版本1: ...

  2. 慕课网中网页定位导航中js相关问题总结

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...

  3. 页面打印(js/jquery)

    1.js实现(可实现局部打印)  <html> <title>js打印</title> <head></head><body>  ...

  4. JS一般般的网页重构可以使用Node.js做些什么(转)

    一.非计算机背景前端如何快速了解Node.js? 做前端的应该都听过Node.js,偏开发背景的童鞋应该都玩过. 对于一些没有计算机背景的,工作内容以静态页面呈现为主的前端,可能并未把玩过Node.j ...

  5. 手机端网页技术--使自己做的asp.net网页适应手机浏览

    使自己做的asp.net网页适应手机浏览 特别提醒: 对于文本框和其他控件,无法自适应,只有纯粹的文本和table的单元格可以自适应,其他的只有设置为具体的宽度,或者在一个表格中(本来在电脑中显示一行 ...

  6. 为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件

    为不同分辨率单独做样式文件,在页面头部用js判断分辨率后动态加载定义好的样式文件.样式文件命名格式如:forms[_屏幕宽度].css,样式文件中只需重新定义文本框和下拉框的宽度即可. 在包含的头文件 ...

  7. 如何查看一个网页特定效果的js代码(动画效果可js和css)(页面可以看到js的源代码)

    如何查看一个网页特定效果的js代码(动画效果可js和css)(页面可以看到js的源代码) 一.总结 1.动画效果可能是 CSS 实现的,也可能是 JS 实现的. 2.直接Chrome的F12调试即可, ...

  8. WPF MeasureOverride和 ArrangeOverride做个 页面导航

    public class NavigationPanel:Panel { protected override Size MeasureOverride(Size availableSize) { S ...

  9. HTML5设计网页熔岩灯导航(navigation bar)插件 已经加上完整源代码

    导航栏(navigation bar): 1.指位于页眉区域的,在页眉横幅图片上边或下边的一排水平导航按钮,它起着链接博客的各个页面的作用. 2.网页设计中不可缺少的部分,它是指通过一定的技术手段,为 ...

随机推荐

  1. maven 依赖冲突的问题

    如果原始系统的jarA依赖jarB1.0 而新引入的jarC依赖jarB2.0 导致系统启动报错,提示冲突,这时为了保证原始系统的稳定性, 在pom.xml文件中引入jarC时,需要exclude掉j ...

  2. PetaPoco 存储过程

    1 执行不带参数的存储过程 public List<dynamic> ceshiProc() { string sql = @"EXEC [dbo].[p_ceshi1]&quo ...

  3. Html5 部分特性

    HTML5 是 W3C 与 WHATWG 合作的结果. 编者注:W3C 指 World Wide Web Consortium,万维网联盟. 编者注:WHATWG 指 Web Hypertext Ap ...

  4. CouchBase 遇到问题笔记(一)

    刚开始看CouchBase,按照官网给出的示例,边敲边理解,遇到了一个很奇怪的问题,如下代码: IView<IViewRow> view = client.GetView("be ...

  5. eclipse build很慢的时候,有可能是js文件编译验证慢的问题

    第一步: 去除eclipse的JS验证: 将windows->preference->Java Script->Validator->Errors/Warnings-> ...

  6. 使用ng-if,获取不到里面的ng-model值,解决方案

    当使用ng-if时,是会把默认作用域删除的,当其为true时,只是增加了其界面元素,为最原始状态,控制器在其上是不起作用的,要想获取ng-if中的值,可以用$scope.$$childTail.lay ...

  7. Objective-C 实例方法可见度,方法

    一 实例方法可见度,方法 1.实例变量的可见度 可见度                                                                       特点 ...

  8. 你好,C++(3)2.1 一个C++程序的自白

    第2部分 与C++第一次亲密接触 在浏览了C++“三分天下”的世界版图之后,便对C++有了基本的了解,算是一只脚跨入了C++世界的大门.那么,怎样将我们的另外一只脚也跨入C++世界的大门呢?是该即刻开 ...

  9. Win异常: 除了chrome浏览器外,所有安装的软件都连不上网

    经查找资料,是LSP被篡改,恢复后使用正常. 百度百科  LSP: Layered Service Provider, 即分层服务提程序,Winsock 作为应用程序的 Windows 的网络套接字工 ...

  10. kafka监控

    做kafka相关项目,需要用到监控的东东,找到了两个方法 第一个: http://quantifind.com/KafkaOffsetMonitor/ 非常容易上手,效果也直观,可以显示各个topic ...