簡體   English   中英

如何在Angular中刪除懸停效果

[英]How to remove hover effect in Angular

我正在嘗試構建一個有角度的應用程序,最近我遇到了一個問題。

我有這樣的東西

<div ng-class="{selectThis : item.pick}" ng-click="pickItem(item)" class="item">Item name here<div>

JS控制器:

$scope.pickItem = function(item) {
    item.pick = true;
}

CSS:

.item {
    color: red;
    …more css
}

.item:hover {
    color:blue;
    ...more css
}

.selectThis {
    color:blue;
}

它在桌面上效果很好,但是當用戶觸摸div時,懸停效果仍將保留在觸摸設備上。 我知道我可以添加媒體查詢來解決此問題,但是我認為這是一種過時的方法。 反正我可以用Angular方法解決嗎? 非常感謝!

您可以通過觸發觸摸事件時添加一個類來使用Angular解決它:

app.directive('touchClass', function() {
  return {
    restrict: 'A',
    scope: {
      touchClass: '@'
    },
    link: function(scope, element) {   
      element.on('touchstart', function() {
        element.$addClass(scope.touchClass);
      });

      element.on('touchend', function() {
        element.$removeClass(scope.touchClass);
      });
    }
  };
});

然后,您可以將此指令添加到所需的任何元素。 在進行touch時,它將添加touch類別,並且在觸摸結束時將其刪除。

<div ng-class="{selectThis : item.pick}"
     ng-click="pickItem(item)"
     touch-class="touch"
     class="item">
  Item name here
<div>

您可以像對待懸停偽選擇器一樣對待此類:

.item {
  color: red;
  …more css
}

.item.touch {
  color:blue;
  ...more css
}

.selectThis {
  color:blue;
}

您還可以在觸摸事件上執行以下操作:

<div ng-class=="{ 'touch': touchStart}"
  on-touch
 class="item">Item name here<div>

並制定一個處理觸摸事件的指令

    .directive('onTouch',function() {
        return {
            restrict: 'A',
            link: function ($scope, $elem, $attrs) {
                $elem.on('touchstart',function(e) {
                    $scope.touchStart= true;
                    $scope.$apply();
                });
                $elem.on('touchend',function(e) {
                    $scope.touchStart= false;
                    $scope.$apply();
                });
            }
        }
    });

PD:我沒有嘗試這段代碼,只是草稿。 希望對您有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM