javascript - js如何取得返回功能的控制权
伊谢尔伦
伊谢尔伦 2017-04-10 16:53:47
[JavaScript讨论组]

缓动函数速查表
像这个单页应用,能对浏览器的前进后退作出反应\n
请问如何实现这种效果?\n
有人理解我的意思吗

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(4)
迷茫

一般来说单页应用是通过改变hash来控制的,比如你发的这个页面,你每点击一次hash都会改变对不对。
这个时候通过hash来路由,比如hash=='app1',当页面页面就会变成app1的内容。页面再通过监听hash的变化来控制应该变化到那个app。

window.onhashchange = function(){
    var hash = location.hash;
    if(hash == '#app1'){
        //xxx;
    }else if(hash == '#app2'){
        //ooo
    }
    //....
}

监听hash变化的onhashchange有浏览器兼容问题,如下图:

可以用下面代码兼容:

(function() {
    if ('onhashchange' in window) {
        if (window.addEventListener) {
            window.addHashChange = function(func, before) {
                window.addEventListener('hashchange', func, before);
            };
            window.removeHashChange = function(func) {
                window.removeEventListener('hashchange', func);
            };
            return;
        } else if (window.attachEvent) {
            window.addHashChange = function(func) {
                window.attachEvent('onhashchange', func);
            };
            window.removeHashChange = function(func) {
                window.detachEvent('onhashchange', func);
            };
            return;
        }
    }
    var hashChangeFuncs = [];
    var oldHref = location.href;
    window.addHashChange = function(func, before) {
        if (typeof func === 'function')
            hashChangeFuncs[before?'unshift':'push'](func);
    };
    window.removeHashChange = function(func) {
        for (var i=hashChangeFuncs.length-1; i>=0; i--)
            if (hashChangeFuncs[i] === func)
                hashChangeFuncs.splice(i, 1);
    };
    setInterval(function() {
        var newHref = location.href;
        if (oldHref !== newHref) {
            var _oldHref = oldHref;
            oldHref = newHref;
            for (var i=0; i<hashChangeFuncs.length; i++) {
                hashChangeFuncs[i].call(window, {
                    'type': 'hashchange',
                    'newURL': newHref,
                    'oldURL': _oldHref
                });
            }
        }
    }, 100);
})();
// Usage, infinitely many times:
addHashChange(function(e){alert(e.newURL||location.href);});
天蓬老师

这不是做反应啊 这就是单页面应用的做法而已
为了防止浏览器不兼容 用#标签来表示跳转的功能(这里我写的不专业,请查阅相关资料)
http://easings.net/zh-cn#easeInExpo
你难道没看到他的url还在变化么
然后在他的外层有个样式
.page-animation .page-slider, .page-animation .easing.linear {

-webkit-transition: all 600ms cubic-bezier(0.77, 0, 0.175, 1);
transition: all 600ms cubic-bezier(0.77, 0, 0.175, 1);

}
这样打开页面时候就有了转场动画效果了

迷茫

用hash不错

阿神

几个单页面框架也是用的hash来控制

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号