html - 使用 Angular 制作可配置的水平滚动菜单

标签 html css angularjs

查看我的 PLNKR ,目前一切都是硬编码的,即菜单项的数量固定为 10,currentMargin。但根据要求,可以有“n”个可水平滚动的菜单项。我试图让它可配置,但不能作为 Angular 的新手。

所以这里是我想要实现的事情:

  1. 只有当我的菜单项超过 3 个时,“向左移动”和“向右移动”按钮才应该可见。
  2. 使其可配置,可以有 'n' 个菜单项。
  3. 当到达前 3 个“向左移动”按钮时将被禁用。
  4. 当到达最后 3 个“向右移动”按钮时将被禁用。
  5. 使菜单项的左右移动更加顺畅。

请参阅上面给出的 plnkr 链接以查看它的实际效果。 这是我的代码, HTML 代码

 <div ng-controller="scrollController">
<input ng-click="myStyle={'margin-left': moveLeft()}" ng-disabled="leftdisabled" class="left" type="button" value="Move Left" />
<div class="menucontainer left">
  <ul ng-style="myStyle">
    <li> <a href="#">111</a>

    </li>
    <li> <a href="#">222</a>

    </li>
    <li> <a href="#">333</a>

    </li>
    <li> <a href="#">444</a>

    </li>
    <li> <a href="#">555</a>

    </li>
    <li> <a href="#">666</a>

    </li>
    <li> <a href="#">777</a>

    </li>
    <li> <a href="#">888</a>

    </li>
    <li> <a href="#">999</a>

    </li>
    <li> <a href="#">000</a>

    </li>
  </ul>
</div>
<input ng-click="myStyle={'margin-left': moveRight()}" ng-disabled="rightdisabled" class="left" type="button" value="Move Right" />
</div>

Angular JS

var app = angular.module('app', []);

app.controller('scrollController', function($scope) {
 $scope.myStyle = {
   'margin-left': '0px'
 };

$scope.moveRight = function() {
var marginLeft = +$scope.myStyle['margin-left'].replace('px', '') + -100;

if (marginLeft === 0) {
  $scope.leftdisabled = true;
}
else{
  $scope.leftdisabled = false;
}

 if (marginLeft === -700) {
  $scope.rightdisabled = true;
}
else{
  $scope.rightdisabled = false;
}

$scope['margin-left'] = marginLeft + 'px';
document.getElementById('infoMargin').innerHTML=marginLeft;
return $scope['margin-left'];

}

$scope.moveLeft = function() {
var marginLeft = +$scope.myStyle['margin-left'].replace('px', '') + 100;

if (marginLeft === 0) {
  $scope.leftdisabled = true;
}
else{
  $scope.leftdisabled = false;
}

if (marginLeft === -700) {
  $scope.rightdisabled = true;
}
else{
  $scope.rightdisabled = false;
}

$scope['margin-left'] = marginLeft + 'px';
document.getElementById('infoMargin').innerHTML=marginLeft;
return $scope['margin-left'];
}

})

最佳答案

试试这个。我做了一些改变。

http://plnkr.co/edit/Hxut4UgN0d3pMeBbSbzl?p=preview

更新(<= 3 个菜单按钮将隐藏):http://plnkr.co/edit/LdVLubl1DKtij4KMWoHd?p=preview

代码:

索引.html

<!DOCTYPE html>
<html>

<head>
  <link rel="stylesheet" href="style.css">
  <script src="https://code.angularjs.org/1.3.0-beta.5/angular.js"></script>
  <script src="script.js"></script>
</head>

<body ng-app="app">
  <div ng-controller="scrollController" >
    <input ng-click="myStyle={'margin-left': moveLeft()}" ng-disabled="leftdisabled" class="left" type="button" value="Move Left" />
    <div class="menucontainer left">
      <ul ng-style="myStyle">
        <li ng-repeat="item in items"> <a href="#">{{item.name}}</a>

        </li>

      </ul>
    </div>
    <input ng-click="myStyle={'margin-left': moveRight()}" ng-disabled="rightdisabled" class="left" type="button" value="Move Right" />
    <br>
    <br>
    <br>
    <br>
    <p style="float:left;">Current Margin :</p>
    <p style="float:left;" id="infoMargin"></p>
    <br>
    <br>
    <p>If current Margin reaches to -700 it I am disabling 'MoveRight"' and if it reaches to Zero i am disabling 'MoveLeft' button.</p>
    <p><b>Need help to make it configurable as currently every thing is hardcoded, there can be 'n' number of menuitem.</b></p>
  </div>

</body>

</html>

脚本.js

//代码在这里

var app = angular.module('app', []);

app.controller('scrollController', function($scope) {
  $scope.myStyle = {
    'float':'left',
    'margin-left': '0px',
    'display':'block'
  };
  var items = [];
  $scope.items = [{name:"111",age:25},{name:"222",age:25},{name:"333",age:25},{name:"444",age:25},{name:"555",age:25},{name:"666",age:25}];

  $scope.moveRight = function() {
    var marginLeft = +$scope.myStyle['margin-left'].replace('px', '') + -100;

    if (marginLeft === 0) {
      $scope.leftdisabled = true;
    }
    else{
      $scope.leftdisabled = false;
    }

     if (marginLeft === -(($scope.items.length-3)*100)) {
      $scope.rightdisabled = true;
    }
    else{
      $scope.rightdisabled = false;
    }

    $scope['margin-left'] = marginLeft + 'px';
    document.getElementById('infoMargin').innerHTML=marginLeft;
    return $scope['margin-left'];

  }

  $scope.moveLeft = function() {
    var marginLeft = +$scope.myStyle['margin-left'].replace('px', '') + 100;

    if (marginLeft === 0) {
      $scope.leftdisabled = true;
    }
    else{
      $scope.leftdisabled = false;
    }

    if (marginLeft === -700) {
      $scope.rightdisabled = true;
    }
    else{
      $scope.rightdisabled = false;
    }

    $scope['margin-left'] = marginLeft + 'px';
    document.getElementById('infoMargin').innerHTML=marginLeft;
    return $scope['margin-left'];
  }

})

关于html - 使用 Angular 制作可配置的水平滚动菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25257236/

相关文章:

html - 框内联 block 未对齐

javascript - Angular : Dynamically changing image (portrait/landscape) using media queries?

javascript - 禁用输入字段不起作用

html - 放大时页面内容容器不会完全垂直拉伸(stretch)

html - 在 :after 的内容上换行

javascript - 我应该将 Javascript/jQuery 文件的链接放在我的 html 文件中的什么位置?

css - 如何检查一个文件是否包含在另一个文件中,忽略空格更改

javascript - 将范围和参数传递给指令 - AngularJS

html - 从网页单击 Excel 图标的 VBA 代码

html - 固定最大高度时的 CSS 自动列数