雙點後根據不同內容滑動出現視窗 使用 AngularJS
最近在做 UI 的時候有討論到希望盡量不要使用彈出視窗,於是想到用類似 mobile 的滑出頁,這次就用 Angular 實作看看。
準備 json 的 list ,我分成三類,等等會根據點到類別的不同開不一樣的滑出頁。
- $scope.list = [
- {
- type: 'type1',
- name: 'Jason',
- description: '[email protected]'
- },
- {
- type: 'type2',
- name: 'Jack',
- description: '[email protected]'
- },
- {
- type: 'type3',
- name: 'Tom',
- description: '[email protected]'
- }
- ];
用 ng-repeat 把 DOM 產出來
- <ul>
- <li ng-repeat="list in list" ng-dblclick="showDetail($index)">
- <div>{{list.name}}</div>
- <div class="description">{{list.description}}</div>
- </li>
- </ul>
準備要滑出的頁面
- <div class="edit type1" ng-class="{type1: 'active', type2: '', type3: '', '':''}[detail_block]">
- <div class="title">Type 1</div>
- <div class="content"></div>
- <div class="footer">
- <a class="btn" ng-click="hideEditBlock()">Save</a>
- </div>
- </div>
動畫是使用 css 完成的,基本原理就是外面用一層 div 包住,並設 overflow=hidden ,這樣超出去的範圍就看不到了,然後在雙點後,加上 active 這個 class 讓頁面跑出來,並使用 css 的 transition ,就會自動變成動畫了。
因為我要根據不同的內容滑出不同的頁面,所以用 ng-class 去判斷:
ng-class="{type1: 'active', type2: '', type3: '', '':''}[detail_block]" ,這邊的意思是我設一個 detail_block 的變數,當變數=type1 ,就會附加 active 這個 class 上去,其他類推。
我覺得 Angular 在這邊很神奇,切換變數後就可以控制 css 了,這邊判斷點到的項目的 type 是什麼改變變數。
- $scope.detail_block="";
- $scope.showDetail=function($index){
- $type=$scope.list[$index].type;
- if($type=="type1"){
- $scope.detail_block="type1";
- }else if($type=="type2"){
- $scope.detail_block="type2";
- }else{
- $scope.detail_block="type3";
- }
- }
最後加一個讓頁面收回去的控制,只要把變數給清空就可以了
- $scope.hideEditBlock=function(){
- $scope.detail_block="";
- }
Demo
留言