亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

基于angular實(shí)現(xiàn)等待長(zhǎng)操作時(shí)鎖定頁(yè)面

2shou / 828人閱讀

摘要:由于網(wǎng)絡(luò)等各方面原因,有時(shí)執(zhí)行一個(gè)操作時(shí)有時(shí)需要等待比較長(zhǎng)的時(shí)間,如果不進(jìn)行特殊處理就無(wú)法知道當(dāng)前操作的狀態(tài),嚴(yán)重影響用戶體驗(yàn)。為了解決上面的問(wèn)題,考慮利用的對(duì)執(zhí)行長(zhǎng)操作時(shí)需要進(jìn)行控制的元素進(jìn)行設(shè)置,實(shí)現(xiàn)以元素為單位進(jìn)行頁(yè)面狀態(tài)的控制。

由于網(wǎng)絡(luò)等各方面原因,有時(shí)執(zhí)行一個(gè)ajax操作時(shí)有時(shí)需要等待比較長(zhǎng)的時(shí)間,如果不進(jìn)行特殊處理就無(wú)法知道當(dāng)前操作的狀態(tài),嚴(yán)重影響用戶體驗(yàn)。

比較常見(jiàn)的解決方案是執(zhí)行可能的長(zhǎng)操作前先打開(kāi)一個(gè)蒙版,覆蓋頁(yè)面,通過(guò)動(dòng)畫(huà)指示當(dāng)前頁(yè)面處于執(zhí)行狀態(tài),獲得返回結(jié)果后在關(guān)閉蒙版。這種方式雖然可以很清晰的展現(xiàn)正在等待操作結(jié)果的狀態(tài),但是對(duì)于網(wǎng)絡(luò)條件比較好,操作結(jié)果很快就返回的情況,會(huì)給用戶造成一種頁(yè)面閃爍的感覺(jué),也會(huì)影響用戶體驗(yàn)。

為了解決上面的問(wèn)題,考慮利用angular的directive對(duì)執(zhí)行長(zhǎng)操作時(shí)需要進(jìn)行控制的元素進(jìn)行設(shè)置,實(shí)現(xiàn)以元素為單位進(jìn)行頁(yè)面狀態(tài)的控制。

需要進(jìn)行狀態(tài)控制的元素有幾類:1、input元素,執(zhí)行長(zhǎng)操作時(shí)它們應(yīng)該處于disabled狀態(tài);2、button等發(fā)起操作的元素,它們應(yīng)該出于disabled的狀態(tài),同時(shí)發(fā)起正在執(zhí)行的長(zhǎng)操作的元素應(yīng)該出于running的狀態(tài),例如:通過(guò)動(dòng)畫(huà)。

實(shí)現(xiàn)思路如下:
1、定義directive,tms-lock

app = angular.module("app", []);
app.directive("tmsLock", function() {
    return {
        restrict: "A",
        scope: {
            lock: "=tmsLock"
        },
        priority: 99,
        compile: function(tElem, tAttrs) {
            var originalFn, lockableFn;
            if (tAttrs.tmsLockPromoter === "Y" && tAttrs.ngClick) {
                originalFn = tAttrs.ngClick;
                lockableFn = "__lockable__" + originalFn;
                tAttrs.ngClick = lockableFn;
            }
            return {
                pre: function(scope, iElem, iAttrs) {
                    if (lockableFn) {
                        scope.$parent[lockableFn.replace(/(.*)/, "")] = function() {
                            var eleIndicator = document.createElement("div");
                            eleIndicator.classList.add("indicator");
                            scope.lock = true;
                            iElem.addClass("tms-lock-running");
                            iElem.append(eleIndicator);
                            scope.$parent[originalFn.replace(/(.*)/, "")].apply(scope, arguments).then(function() {
                                scope.lock = false;
                                iElem.removeClass("tms-lock-running");
                                iElem[0].removeChild(eleIndicator);
                            });
                        };
                    }
                    scope.$watch("lock", function(locked) {
                        if (locked === true) {
                            iElem.addClass("tms-locked");
                            iAttrs.$set("disabled", true);
                        } else if (locked === false) {
                            iElem.removeClass("tms-locked");
                            iAttrs.$set("disabled", undefined);
                        }
                    });
                }
            }
        }
    }
});
app.controller("ctrl", ["$scope", "$q", "$timeout", function($scope, $q, $timeout) {
    $scope.lock = false;
    $scope.longFn = function() {
        var defer;
        defer = $q.defer();
        $timeout(function() {
            defer.resolve();
        }, 10000);
        return defer.promise;
    };
    $scope.otherFn = function() {
        // do nothing
    };
}]);

2、設(shè)置運(yùn)行狀態(tài)的樣式

@keyframes tmsRunning{
    0%{transform:rotate(0deg);}
    12%{transform:rotate(45deg);}
    25%{transform:rotate(90deg);}
    37%{transform:rotate(135deg);}
    50%{transform:rotate(180deg);}
    62%{transform:rotate(225deg);}
    75%{transform:rotate(270deg);}
    87%{transform:rotate(315deg);}
    100%{transform:rotate(360deg);}
}
@-webkit-keyframes tmsRunning{
    0%{-webkit-transform:rotate(0deg);}
    12%{-webkit-transform:rotate(45deg);}
    25%{-webkit-transform:rotate(90deg);}
    37%{-webkit-transform:rotate(135deg);}
    50%{-webkit-transform:rotate(180deg);}
    62%{-webkit-transform:rotate(225deg);}
    75%{-webkit-transform:rotate(270deg);}
    87%{-webkit-transform:rotate(315deg);}
    100%{-webkit-transform:rotate(360deg);}
}
@-moz-keyframes tmsRunning{
    0%{-moz-transform:rotate(0deg);}
    12%{-moz-transform:rotate(45deg);}
    25%{-moz-transform:rotate(90deg);}
    37%{-moz-transform:rotate(135deg);}
    50%{-moz-transform:rotate(180deg);}
    62%{-moz-transform:rotate(225deg);}
    75%{-moz-transform:rotate(270deg);}
    87%{-moz-transform:rotate(315deg);}
    100%{-moz-transform:rotate(360deg);}
}
@-o-keyframes tmsRunning{
    0%{-o-transform:rotate(0deg);}
    12%{-o-transform:rotate(45deg);}
    25%{-o-transform:rotate(90deg);}
    37%{-o-transform:rotate(135deg);}
    50%{-o-transform:rotate(180deg);}
    62%{-o-transform:rotate(225deg);}
    75%{-o-transform:rotate(270deg);}
    87%{-o-transform:rotate(315deg);}
    100%{-o-transform:rotate(360deg);}
}
.btn.tms-lock-running {
    position: relative;
}
.btn.tms-lock-running .indicator::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 4px;
    bottom: 4px;
    width: 4px;
    margin-left: -2px;
    background: #333;
}
.btn.tms-lock-running .indicator {
    position: absolute;
    left: 50%;
    top: 50%;
    margin-left: -1em;
    margin-top: -1em;
    border-radius: 1em;
    width: 2em;
    height: 2em;
    border: 2px solid #333;
    background: #fff;
    animation: tmsRunning 1s infinite;
    -webkit-animation: tmsRunning 1s infinite;
    -moz-animation: tmsRunning 1s infinite;
    -o-animation: tmsRunning 1s infinite;
}

3、給需要鎖定的元素添加屬性



示例

其他仍在考慮的問(wèn)題:1、是否允許用戶主動(dòng)解除頁(yè)面鎖定狀態(tài)?2、是否需要對(duì)硬的頁(yè)面導(dǎo)航操作,例如:后退,進(jìn)行控制?

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/78539.html

相關(guān)文章

  • 最近遇到的前端面試題(2017.03.08更新版)

    摘要:通過(guò)管理組件通信通過(guò)驅(qū)動(dòng)視圖比較差異進(jìn)行更新操作作者第七頁(yè)鏈接來(lái)源知乎著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)。達(dá)到無(wú)刷新的效果。對(duì)象的狀態(tài)不受外界影響。對(duì)象代表一個(gè)異步操作,有三種狀態(tài)進(jìn)行中已完成,又稱和已失敗。 以下問(wèn)題解釋非本人原創(chuàng),是根據(jù)面試經(jīng)驗(yàn)整理后覺(jué)得更容易理解的解釋版本,歡迎補(bǔ)充。 一. 輸入url后的加載過(guò)程 從輸入 URL 到頁(yè)面加載完成的過(guò)程中都發(fā)生了什么 計(jì)算機(jī)...

    linkFly 評(píng)論0 收藏0
  • 最近遇到的前端面試題(2017.03.08更新版)

    摘要:通過(guò)管理組件通信通過(guò)驅(qū)動(dòng)視圖比較差異進(jìn)行更新操作作者第七頁(yè)鏈接來(lái)源知乎著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)。達(dá)到無(wú)刷新的效果。對(duì)象的狀態(tài)不受外界影響。對(duì)象代表一個(gè)異步操作,有三種狀態(tài)進(jìn)行中已完成,又稱和已失敗。 以下問(wèn)題解釋非本人原創(chuàng),是根據(jù)面試經(jīng)驗(yàn)整理后覺(jué)得更容易理解的解釋版本,歡迎補(bǔ)充。 一. 輸入url后的加載過(guò)程 從輸入 URL 到頁(yè)面加載完成的過(guò)程中都發(fā)生了什么 計(jì)算機(jī)...

    Nosee 評(píng)論0 收藏0
  • 最近遇到的前端面試題(2017.03.08更新版)

    摘要:通過(guò)管理組件通信通過(guò)驅(qū)動(dòng)視圖比較差異進(jìn)行更新操作作者第七頁(yè)鏈接來(lái)源知乎著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)。達(dá)到無(wú)刷新的效果。對(duì)象的狀態(tài)不受外界影響。對(duì)象代表一個(gè)異步操作,有三種狀態(tài)進(jìn)行中已完成,又稱和已失敗。 以下問(wèn)題解釋非本人原創(chuàng),是根據(jù)面試經(jīng)驗(yàn)整理后覺(jué)得更容易理解的解釋版本,歡迎補(bǔ)充。 一. 輸入url后的加載過(guò)程 從輸入 URL 到頁(yè)面加載完成的過(guò)程中都發(fā)生了什么 計(jì)算機(jī)...

    劉東 評(píng)論0 收藏0
  • 實(shí)現(xiàn)頁(yè)面加載等待動(dòng)畫(huà)很簡(jiǎn)單嗎?

    摘要:二基于上面的測(cè)試,實(shí)現(xiàn)頁(yè)面加載動(dòng)畫(huà)理想的方式是什么先定好目標(biāo)盡快讓用戶看到變化,不要讓用戶以為頁(yè)面已經(jīng)不響應(yīng),再逐步加載內(nèi)容。頁(yè)面上方加載動(dòng)畫(huà)的定義和頁(yè)面元素,提供異步加載頁(yè)面元素和文件的。 在手機(jī)上打開(kāi)頁(yè)面時(shí),經(jīng)常會(huì)因?yàn)榫W(wǎng)絡(luò)不好導(dǎo)致需要較長(zhǎng)的加載時(shí)間,如果這段時(shí)間內(nèi)只是顯示一個(gè)白板,用戶體驗(yàn)非常不好。通常的解決方案就是完整打開(kāi)頁(yè)面前給用戶展示一個(gè)加載動(dòng)畫(huà),讓用戶能夠看到頁(yè)面還活著呢。...

    bawn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<