跨域的页面中导航随滚动条的滚动发生变化

来源:互联网 发布:什么叫矩阵测光 编辑:程序博客网 时间:2024/05/18 00:24

描述:当页面中嵌套跨域的页面时,需要使滚动条滚到嵌套页面的菜单时,嵌套页面的菜单固定在顶部

方法一

a.html

<!DOCTYPE HTML><html lang="en"><head>    <meta charset="UTF-8">    <title>Apache Tomcat Examples</title></head><style>    html,    body {        width: 100%;        margin: 0px;        height: 100%;    }    .header {        height: 80px;        text-align: center;        line-height: 80px;        background: #000;        color: #fff;    }    .banner {        height: 200px;        color: #fff;        line-height: 200px;        text-align: center;        background: #5eacef;    }</style><body>    <div class="header">header</div>    <div class="banner" id="banner">banner</div>    <iframe src="http://10.4.3.197:8008/b.html" name="myframe" width="99%" frameborder="no" scrolling="no" height="100%" id="iframepage"></iframe></body><script src="jquery-1.8.3.min.js"></script><script>    window.addEventListener('message', function (e) {        document.getElementById("iframepage").style.height = $.parseJSON(e.data).scrollHeight;    }, false);    window.onscroll = function(e) {        var t = document.documentElement.scrollTop || document.body.scrollTop;        var banner = document.getElementById('banner');         var obj = document.getElementById("iframepage").contentWindow;        obj.postMessage(JSON.stringify({            "t": t        }), '*');        if (typeof (exec_obj) == 'undefined') {            exec_obj = document.createElement('iframe');            exec_obj.name = 'tmp_frame';            exec_obj.src = 'http://10.4.3.197:8008/execB.html';            exec_obj.style.display = 'none';            document.body.appendChild(exec_obj);        } else {            exec_obj.src = 'http://10.4.3.197:8008/execB.html?' + Math.random();        }    }</script></html>

b.html

<!DOCTYPE HTML><html lang="en"><head>    <meta charset="UTF-8">    <title>Apache Tomcat Examples</title></head><style>    html,    body {        margin: 0px;        width: 100%;    }    .tab-title ul {        vertical-align: middle;        font-size: 0;        -webkit-transition: width ease .8s;        transition: width ease .8s;    }    .tab-title ul li {        display: inline-block;        text-align: center;        font-size: 14px;        box-sizing: border-box;        max-width: 140px;        min-width: 12.5%;    }    .tab-title ul li.current a {        display: block;        border-bottom: 3px solid #2277da;        color: #2277da;        background: #fff;    }    .tab-title ul li a {        font-size: 14px;        color: #333;        padding: 0 10px;        height: 59px;        line-height: 59px;        display: inline-block;    }    .tab-content {        margin: 40px 0 60px;        position: relative;    }    .fixed-title {        position: fixed;        z-index: 100;        box-shadow: rgba(0, 0, 0, .22) 0 5px 10px -5px;        border-bottom: 0;        width: 100%;    }</style><body onload="load();">    <div class="tab-title" id="tab_title">        <ul>            <li class="current"><a href="#userGuide">新手指引</a></li>            <li class=""><a href="#userImg">客户案例</a></li>            <li class=""><a href="#userDefined9">产品优势</a></li>            <li class=""><a href="#featuresV2">产品功能</a></li>        </ul>    </div>        <h3 id="userGuide" class="tab-content-title">新手指引</h3>        <div class="tab-content-detail qc-wrapper">            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>        </div>        <h3 id="userImg" class="tab-content-title">客户案例</h3>        <div class="tab-content-detail qc-wrapper">            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>        </div>        <h3 id="userDefined9" class="tab-content-title">产品优势</h3>        <div class="tab-content-detail qc-wrapper">            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>        </div></body><script src="jquery-1.8.3.min.js"></script><script>    var t;    window.addEventListener('message', function (e) {        t = $.parseJSON(e.data).t;    }, false);    function load() {        // parent.document.getElementById("iframepage").style.height = document.body.scrollHeight + "px";        top.postMessage(JSON.stringify({            "scrollHeight": document.body.scrollHeight + "px"        }), '*');    }    function changeTitle() {        var iframeTitle = document.getElementById("tab_title");        if (t >= 280) {            !hasClass(iframeTitle, 'fixed-title') && addClass(iframeTitle, 'fixed-title');            iframeTitle.style.top = (t - 280) + 'px';            // var topValue = t - 280  + 'px'            // $(iframeTitle).animate({'top': topValue }, 30);        } else {            hasClass(iframeTitle, 'fixed-title') && removeClass(iframeTitle, 'fixed-title');        }    }    function hasClass(ele, cls) {        return ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));    }    function addClass(ele, cls) {        if (!this.hasClass(ele, cls)) ele.className += " " + cls;    }    function removeClass(ele, cls) {        if (hasClass(ele, cls)) {            var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');            ele.className = ele.className.replace(reg, ' ');        }    }</script></html>

execB.html

<!DOCTYPE HTML><html lang="en"><head>    <meta charset="UTF-8">    <title>Apache Tomcat Examples</title></head><body> <script type="text/javascript">    parent.window.myframe.changeTitle();</script>></body>

方法二

aa.html

<!DOCTYPE HTML><html lang="en"><head>    <meta charset="UTF-8">    <title>Apache Tomcat Examples</title></head><style>    html,    body {        width: 100%;        margin: 0px;        height: 100%;    }    .header {        height: 80px;        text-align: center;        line-height: 80px;        background: #000;        color: #fff;    }    .banner {        height: 200px;        color: #fff;        line-height: 200px;        text-align: center;        background: #5eacef;    }    .hide {        display: none;    }</style><body>    <div class="header">header</div>    <div class="banner" id="banner">banner</div>    <div id="titleId" class="hide"></div>    <iframe src="http://10.4.3.197:8008/bbb.html" name="myframe" width="99%" frameborder="no" scrolling="no" height="100%" id="iframepage"></iframe></body><script src="jquery-1.8.3.min.js"></script><script>// $(function () {    // $(function () {    /*** 绑定事件监听函数* ele 绑定事件元素* event 绑定事件* func 绑定事件的方法*/function myAddEventListener(ele, event, func) {    try{  // Chrome、FireFox、Opera、Safari、IE9.0及其以上版本          ele.addEventListener(event,func,false);      }    catch(e){          try{  // IE8.0及其以下版本              ele.attachEvent('on' + event,func);          }        catch(e){  // 早期浏览器              ele['on' + event] = func;          }      }  }    var moduleTop = [];    myAddEventListener(window, "message", function(res) {        try {            var data = JSON.parse(res.data);            if(data.moduleTop) {                moduleTop = [];                for (var key in data.moduleTop) {                    moduleTop.push([key, data.moduleTop[key]]);                }            }            if(data.height) {                $("#iframepage").css({"height": data.height + "px"});            }            if (data.scrollTop) {                $('html').animate({                    scrollTop: data.scrollTop                }, 2000);            }            if(data.tabDom) {                $('#titleId').append(data.tabDom);                $('#titleId').css({                    "position": "fixed",                    "top": "0",                    "z-index": "100",                    "box-shadow": "rgba(0, 0, 0, .22) 0 5px 10px -5px",                    "border-bottom": "0",                    "width": "100%",                    "background-color": '#fff'                }).on('click', 'a', function() {                    // 停止当前正在运行的动画 $(selector).stop(stopAll,goToEnd)                    $('html, body').stop(true, true);                    // 获取自定义属性                    // var clickHref = $(this).data("href");                    // 获取标签自带属性                    // var clickHref = $(this).prop("href");                    var clickHref = $(this).attr("data-href");                    document.getElementById("iframepage").contentWindow.postMessage(JSON.stringify({                        "clickHref": clickHref                    }), "*");                });            }        }        catch(e) {}    });    $(window).scroll(function(e) {        var scrollTop = $(document).scrollTop();        if(scrollTop > 279) {            $('#titleId').removeClass('hide');            if (moduleTop.length > 0) {                for (var i= 0; i< moduleTop.length; i++) {                    if ((i < moduleTop.length - 1)&&scrollTop > moduleTop[i][1] && scrollTop < moduleTop[i + 1][1]|| (i == moduleTop.length - 1&&scrollTop > moduleTop[i][1])) {                        $("#tab_title").removeClass('hide');                        $("#tab_title a").removeClass('active');                        // $("[href= " + moduleTop[i][0] + "]").addClass('active');                        $("#tab_title a:eq(" + i + ")").addClass('active');                        return;                    }                }            }        }        else {            $("#titleId").addClass('hide');        }    });// })();</script></html>

bb.html

<!DOCTYPE HTML><html lang="en"><head>    <meta charset="UTF-8">    <title>Apache Tomcat Examples</title></head><style>    html,    body {        margin: 0px;        width: 100%;    }    .tab-title ul {        vertical-align: middle;        font-size: 0;        -webkit-transition: width ease .8s;        transition: width ease .8s;    }    .tab-title ul li {        display: inline-block;        text-align: center;        font-size: 14px;        box-sizing: border-box;        max-width: 140px;        min-width: 12.5%;    }    .tab-title ul li.current a {        display: block;        border-bottom: 3px solid #2277da;        color: #2277da;        background: #fff;    }    .tab-title ul li a {        font-size: 14px;        color: #333;        padding: 0 10px;        height: 59px;        line-height: 59px;        display: inline-block;    }    .tab-content {        margin: 40px 0 60px;        position: relative;    }    .tab-title ul li a:hover,.active {display: block;border-bottom: 3px solid #2277da;color: #2277da !important;background: #fff;cursor: pointer}    .fixed-title {        position: fixed;        z-index: 100;        box-shadow: rgba(0, 0, 0, .22) 0 5px 10px -5px;        border-bottom: 0;        width: 100%;    }</style><body>    <div class="tab-title" id="tab_title">        <ul>            <li class="current"><a data-href="#userGuide" >新手指引</a></li>            <li class=""><a data-href="#userImg">客户案例</a></li>            <li class=""><a data-href="#userDefined9">产品优势</a></li>            <li class=""><a data-href="#featuresV2">产品功能</a></li>        </ul>    </div>    <h3 id="userGuide" class="tab-content-title">新手指引</h3>        <div class="tab-content-detail qc-wrapper">            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>        </div>        <h3  id="userImg" class="tab-content-title">客户案例</h3>        <div class="tab-content-detail qc-wrapper">            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>1111</p>        </div>        <h3 id="userDefined9" class="tab-content-title">产品优势</h3>        <div class="tab-content-detail qc-wrapper">            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>        </div>         <h3 id="featuresV2" class="tab-content-title">产品功能</h3>        <div class="tab-content-detail qc-wrapper">            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>11111</p>            <p>1111</p>            <p>1111</p>        </div></body><script src="jquery-1.8.3.min.js"></script><script>// $(function () {    /*** 绑定事件监听函数* ele 绑定事件元素* event 绑定事件* func 绑定事件的方法*/function myAddEventListener(ele, event, func) {    try{  // Chrome、FireFox、Opera、Safari、IE9.0及其以上版本          ele.addEventListener(event,func,false);      }    catch(e){          try{  // IE8.0及其以下版本              ele.attachEvent('on' + event,func);          }        catch(e){  // 早期浏览器              ele['on' + event] = func;          }      }  }// 获取顶层导航点击元素,并在子iframe触发点击事件function postTabClick() {    myAddEventListener(window, "message", function(res) {        var data = JSON.parse(res.data);        try {            if (data.clickHref) {                $("[data-href=" + data.clickHref + "]").click();            }        }        catch(e) {        }    });}// 子iframe导航点击后,获取当前点击元素对应的模块到子iframe顶层的高度function jumpScorll() {    $("#tab_title").on('click', 'a', function() {        var myHref = $(this).data('href');        var scrollTop = $(myHref).position().top;        top.postMessage(JSON.stringify({            "scrollTop": scrollTop + 218,            "selectHref": myHref        }), '*');    });}// 获取各个模块到子iframe的高度function getModuleTop() {    var moduleTop = {};    $('#tab_title a').each(function() {        var href = $(this).data('href');        moduleTop[href] = $(href).position().top;    });    return moduleTop;}// 复制子iframe导航到顶层function copyTab() {    var ip = window.location.protocol + "//" + window.location.host;    var height = $('body').height();    top.postMessage(JSON.stringify({        "tabDom": '<style>' +               '.tab-title ul {vertical-align: middle;font-size: 0;-webkit-transition: width ease .8s;transition: width ease .8s;}' +               '.tab-title ul li {display: inline-block;text-align: center;font-size: 14px;box-sizing: border-box;max-width: 140px;min-width: 12.5%;height: 59px}' +               '.tab-title ul li a {font-size: 14px;color: #333; width: 100%;height: 59px;line-height: 59px;display: inline-block;    text-decoration: none;}' +               '.tab-content {margin: 40px 0 60px;position: relative;}' +               '.tab-title ul li a:hover,.active {display: block;border-bottom: 3px solid #2277da;color: #2277da !important;background: #fff;cursor: pointer}' +              '</style>' +               '<div class="tab-title hide" id="tab_title">' +               '<ul>' +              '<li ><a class="active" data-href="#userGuide" >新手指引</a></li>' +              '<li><a data-href="#userImg">客户案例</a></li>' +              '<li><a data-href="#userDefined9" >产品优势</a></li>' +              '<li><a data-href="#featuresV2">产品功能</a></li>' +              '</ul>' +              '</div>',    "moduleTop": getModuleTop(),    "height": height    }), '*');}copyTab();jumpScorll();postTabClick();// })();</script></html>
原创粉丝点击