123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- /*
- 前进后退处理区域
- 用于场景
- 1、导航前进后退处理
- 2、记录用户步骤处理
- 3、url前进后退处理
- */
- Namespace.register("U.AFB");
- //#region 前进后退使用处理区域
- U.AFB.GoList = {}; //前进后退处理
- U.AFB.UTH = null //url处理
- //#endregion
- //#region 前进后退处理
- /**
- * 前进后退公开调用区域
- *
- * @param {string} 前进后退在指定的域
- * @param {boolean} 是否重新加载
- */
- U.AFB.RGoL = function (UTF, UFT) {
- var _UDE = U.AFB.GoList;
- //根据类类型 获取前进后退类
- if (_UDE[UTF] && UFT !== true) { //已经存在域的前进后退
- return _UDE[UTF].UT;
- }
- else { //创建一个新的前进后退处理
- return new U.AFB.init(UTF);
- }
- }
- /**
- * 注册前进后退
- *
- * @param {string} 前进后退在指定的域 如 disk 那就在disk导航
- */
- U.AFB.init = function (UTF) {
- /*
- 描述
- -----OF: 当前前进后退集合
- -----OL: 前进后退所在的位置
- -----UT: 当前的域
- */
- U.Ut.AddObj(this, { OF: [], OL: 0, UT: this });
- U.AFB.GoList[UTF] = this; //添加到集合里面
- }
- /**
- * 添加前进后退
- *
- * @param {function} 前进后退函数添加
- * @param {string} 前进后退在指定的域
- */
- U.AFB.AddEvent = function (UCB, UTF) {
- var _UTE = U.AFB.RGoL(UTF);
- UCB = U.M.apply(_UTE, UCB);
- _UTE.AddDrawBack(UCB); UCB(); //添加执行前进后退
- }
- /**
- * 添加前进后退事件
- *
- * @param {function} 前进后退函数添加
- */
- U.AFB.AddDrawBack = function (UCB) {
- this.OF.splice(this.OL, this.OF.length - this.OL, UCB); //添加一个前进后退时间
- this.OL++; //位置加一
- }
- /**
- * 前进后退统一处理区
- *
- * @param {number} 前进后退处理参数
- ----------1 前进处理
- ----------0 后退处理
- */
- U.AFB.GQH = function (UTF) {
- var _UCB = this.OF[this.OL - UTF * 2]; //获取前进后退事件
- (_UCB) && (_UCB(), this.OL += ((-UTF * 2) + 1)); //前进后退执行
- }
- /**
- * 后退执行
- *
- * @param {string} 前进后退在指定的域
- */
- U.AFB.DrawBack = function (UTF) {
- U.AFB.GoList[UTF]["UT"].GQH(1);
- }
- /**
- * 前进执行
- *
- * @param {string} 前进后退在指定的域
- */
- U.AFB.GoForward = function (UTF) {
- U.AFB.GoList[UTF]["UT"].GQH(0);
- }
- //设置原型 运行实例化使用
- U.AFB.init.prototype = {
- AddEvent: U.AFB.AddEvent,
- AddDrawBack: U.AFB.AddDrawBack,
- GQH: U.AFB.GQH,
- DrawBack: U.AFB.DrawBack,
- GoForward: U.AFB.GoForward
- }
- //#endregion
- //#region 网页路由使用
- /**
- * 添加路由监视
- *
- * @param {function} 监督url hash变化的处理
- */
- U.AFB.UrlRoute = function (UCB) {
- if (!U.AFB.UTH) { //监视使用的地址变化导航
- U.AFB.UTH = new U.AFB.Path(UCB).init();
- }
- return U.AFB.UTH; //返回路由
- }
- /**
- * 初始化url导航
- *
- * @param {function} 监督url hash变化的处理
- */
- U.AFB.Path = function (UCB) {
- this.UH = window.location.hash; //Hash值
- this.UDE = []; //前进后退记录
- this.UCB = UCB; //回调函数记录
- this.UIE = window.history.length; //当前浏览了多少页面
- this.UGT = this.UTF = true; //hash是否在变化
- this.IE = !("onhashchange" in window) || (document.documentMode < 8); //判断是否支持onhashchange
- }
- //路由统计区域
- U.AFB.TJ = function (UDE) {
- this.UE = UDE[0]; //记录的url处理
- this.UCB = UDE[1]; //回调函数
- }
- //添加独立路由设置
- U.AFB.Set = function (UDE) {
- var i, j, _UCE,
- _UTE = U.AFB.UrlRoute(),
- _UAE = _UTE.UDE;
- _UCE: for (i = 0; i < UDE.length; i++) {//生成添加
- for (j = 0; j < _UAE.length; j++) {
- //判断url所在的域下
- if (_UAE[j].UE.join("/") == UDE[i][0].join("/")) {
- continue _UCE;
- }
- }
- //
- _UAE.push(new this.TJ(UDE[i]));
- }
- }
- //添加设置Hash
- U.AFB.Add = function (UDE, UN) {
- if (UDE) {
- var i, _UST = UDE.join("/");
- _UST = _UST ? "#!/" + _UST : "";
- if (this.IE) {
- this.UGT = true;
- this.UTF = false; this.ICHT(this.UH, _UST);
- } //IE7要产生记录s
- this.setNC();
- $(document).addAttrArray({ "location": { "hash": _UST }, "title": "云端 - " + (UN ? UN : "1473.cn") }); return false; //生成Hash
- }
- }
- ////设置功能
- U.AFB.Path.prototype = {
- constructor: U.AFB.Path,
- UrlRoute: U.AFB.UrlRoute,
- TJ: U.AFB.TJ,
- Set: U.AFB.Set,
- Add: U.AFB.Add,
- init: function () {//初始化
- this.UH = window.location.hash; //生成
- if (this.UH) { this.Ch(); }
- if (this.IE) { document.documentElement.onpropertychange = window.onpropertychange = document.onpropertychange = U.M.apply(this, [[this.ICH]]); } //支持ie6 7处理
- window.onhashchange = U.M.apply(this, [[this.Ch]]);
- return this; //初始化的判断是否有值
- },
- Ch: function () { //地址变化使用
- if (this.UTF && !this.NC) {
- var i, _UTF, _USE, _UAE = this.UDE, _UDE = U.M.GetUF();
- if (_UDE[0]) { //路由事件使用
- for (i = 0; i < _UAE.length; i++) { //触发指定的回调
- if (_UAE[i].UE.join("/").indexOf(_UDE.join("/")) > -1) {
- (_UAE[i].UCB) && (_UAE[i].UCB()); return;
- }
- }
- //生成url的前进后退
- this.setNC();
- this.UCB(_UDE); //url回调
- // _USE = U.M.GetUF(); //获取hash值
- // ((_UTF = _UDE.join("") == _USE.join(""))) && (this.Add[]);
- // this.Add(_UDE.slice(1));
- // _USE = U.M.GetUF();
- // ((_UTF = _UDE.join("") == _USE.join(""))) && (this.Add[]);
- // this.GO(-1);
- // (_UTF) && ((U.M.GetUF().join("") == _UDE.join("")) && (this.GO(-1)));
- // this.Add(_UDE.slice(1));
- // this.UCB(_UDE); //设置url
- }
- }
- },
- setNC: function () { //处理onhashchange 重复
- if (!this.NC) {
- this.NC = true;
- setTimeout(U.M.apply(this, function () { this.NC = false; }), 0);
- } //设置当前使用
- },
- ICH: function () { //Hash值ie变化
- var _UE = window.event, _UHE = window.location.hash;
- if (_UE.propertyName == "onbeforeeditfocus" && this.UGT && _UHE != this.UH) {//判断是否需要加载hash
- if (this.UTF) { this.UGT = this.UTF = false; setTimeout(this.GO, 0); setTimeout(U.M.apply(this, [[this.AddHS, [_UHE]]]), 0); } //回车检测设置
- else { this.UH = _UHE; this.Ch(); } //统一设置
- }
- },
- AddHS: function (UH) { //IE6-7支持
- this.Add(UH.split("/").slice(1));
- this.UH = UH; this.UTF = true;
- },
- ICHT: function (UH, UNH) {//IE8一下的浏览器保存记录
- var _UDID = Guid.guidNoDash(),
- _UDOD = $$("iframe", { "UrlRoute": [UH, UNH, (this.UIE++)], "tabindex": "-1", "id": _UDID, "name": _UDID, "style": { "cssText": "width:0;height:0;display:none" }, "src": "about:blank" }, $("body")[0]); //创建记录的Iframe "javascript:void((function(){document.open();document.domain='" + document.domain + "';document.close()})())"
- U.M.AddEvent("load", _UDOD, U.M.apply(this, [[this.UQJH, [_UDOD]]])); //添加生成
- },
- UQJH: function (UDOD) {//产生一个接收前进后退的Iframe
- U.M.ReEvent("load", UDOD, arguments.callee.caller);
- var _UW = UDOD.contentWindow,
- _UD = _UW.document.open();
- _UD.close(); //生成记录
- U.M.AddEvent("load", UDOD, U.M.apply(this, [[this.AUQJH, [UDOD]]])); //前进后退变化
- },
- AUQJH: function (UDOD) {//前进后退回调
- var _UH = this.UH,
- _UNH = UDOD.UrlRoute,
- _UIE = this.UIE - _UNH[2];
- _UNH = _UNH[1 - _UIE]; //前进后退的判断
- this.UGT = true; this.UTF = false; this.UIE -= (_UIE * 2 - 1); if (_UH != _UNH) { document.location.hash = _UNH; } //重新设置hash值
- },
- GO: function (UTF) {
- window.history.go(UTF || -1);
- } //前进后退执行
- }
- ////设置功能
- //U.M.Setprototype(U.AFB.Path, {
- // constructor: U.AFB.Path,
- // UrlRoute: U.AFB.UrlRoute,
- // TJ: U.AFB.TJ,
- // Set: U.AFB.Set,
- // Add: U.AFB.Add,
- // init: function () {//初始化
- // this.UH = window.location.hash; //生成
- // if (this.UH) { this.Ch(); }
- // if (this.IE) { document.documentElement.onpropertychange = window.onpropertychange = document.onpropertychange = U.M.apply(this, [[this.ICH]]); } //支持ie6 7处理
- // window.onhashchange = U.M.apply(this, [[this.Ch]]);
- // return this; //初始化的判断是否有值
- // },
- // Ch: function () { //地址变化使用
- // if (this.UTF && !this.NC) {
- // var i, _UTF, _USE, _UAE = this.UDE, _UDE = U.M.GetUF();
- // if (_UDE[0]) { //路由事件使用
- // for (i = 0; i < _UAE.length; i++) { //触发指定的回调
- // if (_UAE[i].UE.join("/").indexOf(_UDE.join("/")) > -1) {
- // (_UAE[i].UCB) && (_UAE[i].UCB()); return;
- // }
- // }
- // //生成url的前进后退
- // this.setNC();
- // this.UCB(_UDE); //url回调
- // // _USE = U.M.GetUF(); //获取hash值
- // // ((_UTF = _UDE.join("") == _USE.join(""))) && (this.Add[]);
- // // this.Add(_UDE.slice(1));
- // // _USE = U.M.GetUF();
- // // ((_UTF = _UDE.join("") == _USE.join(""))) && (this.Add[]);
- // // this.GO(-1);
- // // (_UTF) && ((U.M.GetUF().join("") == _UDE.join("")) && (this.GO(-1)));
- // // this.Add(_UDE.slice(1));
- // // this.UCB(_UDE); //设置url
- // }
- // }
- // },
- // setNC: function () { //处理onhashchange 重复
- // if (!this.NC) {
- // this.NC = true;
- // setTimeout(U.M.apply(this, function () { this.NC = false; }), 0);
- // } //设置当前使用
- // },
- // ICH: function () { //Hash值ie变化
- // var _UE = window.event, _UHE = window.location.hash;
- // if (_UE.propertyName == "onbeforeeditfocus" && this.UGT && _UHE != this.UH) {//判断是否需要加载hash
- // if (this.UTF) { this.UGT = this.UTF = false; setTimeout(this.GO, 0); setTimeout(U.M.apply(this, [[this.AddHS, [_UHE]]]), 0); } //回车检测设置
- // else { this.UH = _UHE; this.Ch(); } //统一设置
- // }
- // },
- // AddHS: function (UH) { //IE6-7支持
- // this.Add(UH.split("/").slice(1));
- // this.UH = UH; this.UTF = true;
- // },
- // ICHT: function (UH, UNH) {//IE8一下的浏览器保存记录
- // var _UDID = Guid.guidNoDash(),
- // _UDOD = $$("iframe", { "UrlRoute": [UH, UNH, (this.UIE++)], "tabindex": "-1", "id": _UDID, "name": _UDID, "style": { "cssText": "width:0;height:0;display:none" }, "src": "about:blank" }, $("body")[0]); //创建记录的Iframe "javascript:void((function(){document.open();document.domain='" + document.domain + "';document.close()})())"
- // U.M.AddEvent("load", _UDOD, U.M.apply(this, [[this.UQJH, [_UDOD]]])); //添加生成
- // },
- // UQJH: function (UDOD) {//产生一个接收前进后退的Iframe
- // U.M.ReEvent("load", UDOD, arguments.callee.caller);
- // var _UW = UDOD.contentWindow,
- // _UD = _UW.document.open();
- // _UD.close(); //生成记录
- // U.M.AddEvent("load", UDOD, U.M.apply(this, [[this.AUQJH, [UDOD]]])); //前进后退变化
- // },
- // AUQJH: function (UDOD) {//前进后退回调
- // var _UH = this.UH,
- // _UNH = UDOD.UrlRoute,
- // _UIE = this.UIE - _UNH[2];
- // _UNH = _UNH[1 - _UIE]; //前进后退的判断
- // this.UGT = true; this.UTF = false; this.UIE -= (_UIE * 2 - 1); if (_UH != _UNH) { document.location.hash = _UNH; } //重新设置hash值
- // },
- // GO: function (UTF) {
- // window.history.go(UTF || -1);
- // } //前进后退执行
- //});
- //U.M.Setprototype(U.AFB.Path.prototype.init, U.AFB.Path.prototype);
- //#endregion
|