2017-07-03 10 views
-1

私のAngularJSプロジェクトでは、ユーザーが何かを検索したときに検索バーが表示されます。結果はbar.userを検索するために下に表示されます。私がしようとしているのは、ユーザーが下にスクロールしたときに、検索バーが後に続くはずです.i見つかったJQuery code。しかし、私はAngularJS.howでこれを変換できますかAngularJSに変換できますか?スクロールするときにdivを作成する方法

<div id="p_search"> 
      <div class="input-group"> 
      <input class="form-control input-lg" placeholder="Search Here" ng-model="query.name" /> 
      <select class="form-control input-lg" placeholder="All Cetegories" ng-model="query.category"> 
       <option ng-repeat="option in categories" value="{{option.id}}">{{option.category}}</option> 
       </select> 
      <span class="input-group-btn"> 
       <button class="btn btn-purple btn-lg" type="submit" ><i class="fa fa-search"></i></button> 
      </span> 
      </div> 
     </div> 

マイコントローラー

myApp.controller('PController', function ($scope, $http, $window, Common, localStorageService) { 

}); 
+0

最も簡単な解決策は、 '位置を使用することです:fixed'をして、ユーザーがスクロールが、それは同じ位置にとどまる場合でもそうしたい位置に検索バーを固定します。それともアニメーション化したいですか? – Manish

+0

私は 'css position:fixed'をテストしました。しかし、アニメーションを使って上記のjQuery example.yesのようにスムーズにdivを動かしたいと思います。 – Tje123

+0

あなたはコントローラに同じjQueryコードを入れることができます。検索ボックスに「follow-scroll」クラスを追加します。 –

答えて

0

私はあなたのようなものの同様の例を助けるかもしれない例plnkrを作成していました。スティッキーパートを特定の場所に配置するには、スタイルを変更する必要があります。

angular 
 
    .module('app', []) 
 
    .controller('MainCtrl', MainCtrl); 
 

 
function MainCtrl($scope, $http, $window, $document, $timeout) { 
 
    var ctop = 0; 
 
    var sectionArr = []; 
 

 
    var initEvents = function() { 
 
    //delaying for dom height calculation 
 
    $timeout(function() { 
 
     angular.forEach($scope.blocks, function(data, index) { 
 
     var s = angular.element($document[0].getElementById('block-' + index))[0]; 
 
     sectionArr[index] = { 
 
      top: s.offsetTop, 
 
      height: (s.offsetHeight + s.offsetTop) 
 
     }; 
 
     }); 
 
    }, 200); 
 

 
    //attaching event for scrolling 
 
    angular.element($window).off('scroll').on('scroll', function(ev) { 
 
     var scrollOffsetTop = ev.pageY || ($window.pageYOffset !== undefined) ? $window.pageYOffset : ($document[0].documentElement || $document[0].body.parentNode || $document[0].body).scrollTop; 
 
     var gabBetween = 1; 
 
     angular.forEach(sectionArr, function(data, id) { 
 
     var head = angular.element($document[0].getElementById('header-' + id)); 
 
     if (scrollOffsetTop > data.top && scrollOffsetTop < data.height) { 
 
      if (scrollOffsetTop > (data.height - head[0].clientHeight) && scrollOffsetTop < data.height) { 
 
      head.addClass('absolute') 
 
       .removeClass('fixed') 
 
       .css('top', (data.height - (data.top + head[0].clientHeight) - gabBetween) + 'px'); 
 
      } else { 
 
      head.addClass('fixed') 
 
       .removeClass('absolute') 
 
       .css('top', 0); 
 
      } 
 
     } else { 
 
      head.removeClass('fixed') 
 
      .removeClass('absolute') 
 
      .removeAttr('style'); 
 
     } 
 
     }); 
 
    }); 
 
    }; 
 

 
    //initializing for fetching json 
 
    var init = function() { 
 
    $scope.blocks = [{ 
 
     "header": "Header First", 
 
     "content": "Header First with content............. First Header" 
 
    }, { 
 
     "header": "Header Second", 
 
     "content": "Header Second with content............. Second Header" 
 
    }, { 
 
     "header": "Header Third", 
 
     "content": "Header Third with content............. Third Header" 
 
    }, { 
 
     "header": "Header Fourth", 
 
     "content": "Header Fourth with content............. Fourth Header" 
 
    }, { 
 
     "header": "Header Fifth", 
 
     "content": "Header Fifth with content............. Fifth Header" 
 
    }, { 
 
     "header": "Header Sixth", 
 
     "content": "Header Sixth with content............. Sixth Header" 
 
    }, { 
 
     "header": "Header Seventh", 
 
     "content": "Header Seventh with content............. Seventh Header" 
 
    }]; 
 
    //events attachment occurs after fetching data 
 
    initEvents(); 
 
    }; 
 

 
    //starting 
 
    init(); 
 
}
body { 
 
    background: #efefef; 
 
    overflow-x: hidden; 
 
    margin: 0; 
 
    padding: 0; 
 
    font-family: 'Ubuntu', verdana; 
 
} 
 

 
section { 
 
    position: relative; 
 
    display: inline-block; 
 
    width: 100%; 
 
    min-height: 700px; 
 
    padding: 0; 
 
    margin: 0; 
 
} 
 

 
section>header { 
 
    display: block; 
 
    min-height: 75px; 
 
} 
 

 
header>div { 
 
    color: #fff; 
 
    z-index: 1; 
 
    background: #fe001a; 
 
    background: rgba(254, 0, 26, 0.8); 
 
    padding: 5px 25px; 
 
} 
 

 
header>.fixed { 
 
    position: fixed; 
 
    top: 0; 
 
    left: 0; 
 
    right: 0; 
 
    z-index: 0; 
 
} 
 

 
header>.absolute { 
 
    position: absolute; 
 
    left: 0; 
 
    right: 0 
 
} 
 

 
section>p { 
 
    text-align: left; 
 
    padding: 0 25px; 
 
    line-height: 20px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<body data-ng-app="app" data-ng-cloak> 
 
    <h2>Sticky Header</h2> 
 
    <p>Checkout example of each section making a sticky header</p> 
 
    <main data-ng-controller="MainCtrl"> 
 
    <section data-ng-repeat="data in blocks" id="block-{{$index}}"> 
 
     <header> 
 
     <div id="header-{{$index}}"> 
 
      <h3>{{data.header}}<span style="float:right">#{{$index+1}}</span></h3> 
 
     </div> 
 
     </header> 
 
     <p data-ng-bind="data.content"></p> 
 
    </section> 
 
    </main> 
 
    <script src="script.js"></script> 
 
</body>

+0

@ Tje123 1つのフォロー可能なボックスが必要な場合、私の答えは正しいものではないかもしれません。すぐにコメントして、人々が投票を開始する前に削除できるようにしてください。それに続く動的なスティッキーボックスが必要な場合は、その一部を再利用できます。 – Priya

+0

あなたのコードを試しています。 – Tje123

関連する問題