【问题标题】:Use angular ui bootstrap carousel only on mobile devices仅在移动设备上使用 angular ui bootstrap carousel
【发布时间】:2017-05-07 10:51:33
【问题描述】:

有没有什么方法可以仅对移动设备有条件地应用引导轮播并将其内容用作桌面的静态 html?

我的规范没有重复的 html,以便在移动设备和桌面设备上以不同的方式显示相同的内容(由各自的引导断点定义和设备宽度定义)。这就是为什么我不能只为内容使用两个不同的容器。在设计中,为移动设备提供了一个轮播,其内容应显示为桌面的静态 html。

【问题讨论】:

  • 如何定义“移动设备”?如果视口足够小?如何添加一个观察端口宽度的观察器,当它足够小时你使用ng-if 来显示你需要的任何东西。
  • 好问题:我会用断点 $screen-sm 的设备宽度来定义它

标签: javascript css angularjs twitter-bootstrap angular-ui-bootstrap


【解决方案1】:

UI-Bootstrap 不处理有条件地显示 ui 组件,但是普通的 ol' angular 可以,您可以编写一个指令来监视屏幕大小和调整事件大小并相应地更新一个值,然后使用带有该值的 ng-if .

  1. 给resize事件绑定一个值,当宽度改变时运行$apply()

  2. 将手表附加到$window.innerWidth 并监听它的值,当应用运行时,手表将测试宽度是大于还是小于 768 像素。

    // inside directive
    app.directive('viewPortWatcher', function($window) {
    return {
       restrict: "AE",
       scope: {
          show: "="
       },
       link: function(scope, element) {
    
        var width = angular.element($window);
        width.bind('resize', function() {
          scope.$apply();
        });
    
        scope.$watch(function() {
          return $window.innerWidth;
        }, function(value) {
          if (value <= 768) { // sm
            scope.show = true;
          } else {
            scope.show = false;
          }
        });
      }
    }
    }
    
  3. 在你的 html 中

    <view-port-watcher show="show"></view-port-watcher>
    
    <span ng-if="show">
      show carousel 
    </span> 
    <span ng-if="!show">
      don't show carousel 
    </span>
    

plunker

【讨论】:

  • 虽然我会将这种方法用于其他事情,但在这种情况下,我会说使用 css 断点是一个更好的解决方案。
  • 基本上这就是我在if (value &lt;= 768) { // sm 所做的方法,因为 Angular 不知道这些断点,我不得不硬编码这些值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-26
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多