码迷,mamicode.com
首页 > 其他好文 > 详细

191、angular1之弹窗封装

时间:2020-04-04 20:18:06      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:html   rtti   back   cancel   type   res   template   text   null   

<div id="">
  <div class="alertMask" ng-if="alert.isShowAlert" ng-click="clickMask()"></div>
  <div class="alertWhole" ng-if="alert.isShowAlert" ng-style="alert.width" id="alertDrag">
    <div class="alertTitle">
      <span ng-bind="alert.titleText" id="titleId"></span>
      <em ng-click="closeMask()" ng-show="alert.isShowTitle"></em>
    </div>
    <div class="alertContent">
      <div ng-bind="alert.contentText"></div>
      <div ng-bind-html="alert.templateHTML"></div>
      <div id="contentScope"></div>

    </div>
    <div class="alertBottom" ng-show="alert.isShowBottom">
      <input value="{{alert.cancelTxt}}" ng-click="closeMask()" ng-show="alert.isShowCancelButton" type="button" />
      <input value="{{alert.confirmTxt}}" ng-click="alert.confirmCallback()" ng-show="alert.isShowConfirmButton" type="button" id="idConfirm" />
    </div>
  </div>
</div>

(function () {
  angular.module(CY).directive(componentAlert, function () {
    return {
      restrict: E,
      templateUrl: module/alert.html,
      scope: {},
      controller: function ($scope, serviceAlert) {
        $scope.alert = serviceAlert;
        $scope.clickMask = function () {
          if ($scope.alert.isHideAlertAsClickMask) {
            $scope.closeMask()
          }
        };
        $scope.closeMask = function () {
          $(#alertDrag).css({
            top: 50%,
            left: 50%,
            transform: translate(-50%, -50%)
          });
          $scope.alert.show(false);
        };
        $scope.drag = function () {
          var oDiv = document.getElementById(alertDrag);
          oDiv.onmousedown = down;
          function processThis(fn, currentThis) {
            return function (event) {
              fn.call(currentThis, event);
            };
          }
          function down(event) {
            event = event || window.event;
            if (event.target.id != titleId) return;
            this.initOffsetLeft = this.offsetLeft;
            this.initOffsetTop = this.offsetTop;
            this.initClientX = event.clientX;
            this.initClientY = event.clientY;
            this.maxOffsetWidth = (document.documentElement.clientWidth || document.body.clientWidth) - this.offsetWidth;
            this.maxOffsetHeight = (document.documentElement.clientHeight || document.body.clientHeight) - this.offsetHeight;
            if (this.setCapture) {
              this.setCapture();
              this.onmousemove = processThis(move, this);
              this.onmouseup = processThis(up, this);
            } else {
              document.onmousemove = processThis(move, this);
              document.onmouseup = processThis(up, this);
            }
          }
          function move(event) {
            var currentLeft = this.initOffsetLeft + (event.clientX - this.initClientX);
            var currentTop = this.initOffsetTop + (event.clientY - this.initClientY);
            //以下都是边界值的判断;
            if (currentLeft > this.maxOffsetWidth + this.clientWidth * 1.25) {
              currentLeft = this.maxOffsetWidth + this.clientWidth * 1.25;
            } else if (currentLeft < -this.clientWidth / 4) {
              currentLeft = -this.clientWidth / 4;
            }
            if (currentTop > this.maxOffsetHeight + this.clientHeight * 1.25) {
              currentTop = this.maxOffsetHeight + this.clientHeight * 1.25;
            } else if (currentTop < -this.clientHeight / 4) {
              currentTop = -this.clientHeight / 4;
            }
            this.style.left = currentLeft + px;
            this.style.top = currentTop + px;
          }

          function up() {
            if (this.releaseCapture) {
              this.releaseCapture();
              this.onmousemove = null;
              this.onmouseup = null;
            } else {
              document.onmousemove = null;
              document.onmouseup = null;
            }
          }
        };
        $scope.drag();
      },
      link: function () {

      }
    };
  }).factory(serviceAlert, function ($sce, $compile, $rootScope, $document, $timeout) {
    return {
      isHideAlertAsClickMask: true,
      width: 300px,
      isShowTitle: true,
      titleText: 系统消息,
      isShowBottom: true,
      cancelTxt: 取消,
      confirmTxt: 确定,
      isShowCancelButton: true,
      isShowConfirmButton: true,
      getFocus: function () {
        var that = this;
        that.focusedElement = document.activeElement;
        $(that.focusedElement).blur();
        angular.element(document).ready(function () {
          $timeout(function () {
            $(#idConfirm).focus();
          });
        });
      },
      set: function (obj) {
        var that = this;
        that.isShowAlert = true;
        that.contentText = ‘‘;
        that.contentHTML = obj.contentHTML;
        that.contentScope = obj.contentScope;
        that.contentCallback = obj.contentCallback;
        if (that.contentHTML) {
          if (that.contentScope) {
            that.newScope = $rootScope.$new();
            angular.merge(that.newScope, that.contentScope);
            angular.element(document).ready(function () {
              angular.element(#contentScope).empty().append($compile(angular.element(that.contentHTML))(that.newScope));
            });
          } else {
            that.templateHTML = $sce.trustAsHtml(that.contentHTML);
            angular.element(document).ready(function () {
              angular.isFunction(that.contentCallback) ? that.contentCallback() : angular.noop();
            });
          }
        }
        that.confirmCallback = function () {
          angular.isFunction(obj.confirmCallback) ? obj.confirmCallback() : angular.noop();
          that.show(false);
        };

        that.cancelCallback = function () {
          angular.isFunction(obj.cancelCallback) ? obj.cancelCallback() : angular.noop();
          that.show(false);
        };
        angular.merge(that, obj);
        that.getFocus();
      },
      show: function (boolean) {
        var that = this;
        this.isShow = boolean || false;
        if (boolean === false) {
          $(that.focusedElement).focus();
        }
      },
    };
  });

})();

 

191、angular1之弹窗封装

标签:html   rtti   back   cancel   type   res   template   text   null   

原文地址:https://www.cnblogs.com/gushixianqiancheng/p/12633642.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!