AngularJS-Ionic:创建一个可滑动的horizo​​natlview,它将更新垂直视图

Vik*_*ngh 9 html javascript jquery angularjs ionic-framework

我想使用angularjs和ionic为Android和iOS创建一个UI.查看如下: 在此输入图像描述

说明:在此视图中,我希望包含一个水平条带(当前显示1到8个日期,但可以从月份的第1天到月的最后一天可以刷卡)包含日期.该条带可左右滑动.每天都会有一些数据显示在垂直列表视图中.当用户在水平条带上向左或向右滑动时,垂直数据将会更新.垂直列表视图将仅显示水平条带中显示的日期数据.

我不知道我怎么做.任何指针,例如库/示例代码等都将非常感激.

谢谢

Tak*_*aki 5

我会推荐swiper,我之前使用它,我发现它简单易用:http://idangero.us/swiper/,http://idangero.us/swiper/get-started/

文档:http://idangero.us/swiper/api/

Swiper也是Ionic Framework中的默认滑块组件

快速概述:

你可以将它配置为一次显示x幻灯片,而中间的那个将始终拥有swiper-slide-active该类,你有一个事件slideChangeswiper-slide-active更改时被触发,你可以放入你想要的任何函数(也许是一个ajax来获取当天的数据),它只是发射有点太早了,所以你需要把它包在setTimeout1ms

我根据你的布局做了一个基本的例子,这里有一个你可以玩的小提琴,并根据你的需要改变它:

https://jsfiddle.net/o9u0qenk/15/(本周更新) https://jsfiddle.net/o9u0qenk/22/(实时更新)

编辑

要显示7天范围内的数据,将centeredSlides: true被删除,因此swiper-slide-active成为左边的第一张幻灯片,这样就是你的startDate,添加6来获得endDate

编辑2

为了实时跟踪日期,您可以使用该事件sliderMove来检测滑块是否在移动并执行某些操作,并且您可以将offsetLeft每张幻灯片存储在一个Array并在用户滑动时循环显示它并比较使用offsetswiper 的电流值,然后break匹配时不再继续通过loop

编辑片段:

var content = document.getElementById('content');
	
var currenOffset; // swiper's offset
var childOffset; // slide's offset
	
var startIndex; 
var endIndex;
	
var slides = document.getElementsByClassName('swiper-slide');
var slidesOffsets = [];
  
var swiper = new Swiper('.swiper-container', {
  slidesPerView: 7,
  spaceBetween: 10,      
  on: {
    init: function () {
      setTimeout(function(){
        var startDay = document.getElementsByClassName('swiper-slide-active')[0].innerHTML;
        var endDay = parseInt(startDay) + 6 ;            
        content.innerHTML = '<div> Showing data for days ' + startDay + ' to ' + endDay + '</div>';
      }, 1);
    }
  }
});
	
swiper.on('slideChange', function () {
  setTimeout(function(){
    var startDay = document.getElementsByClassName('swiper-slide-active')[0].innerHTML;
    var endDay = parseInt(startDay) + 6 ;
    content.innerHTML = '<div> Showing data for days ' + startDay + ' to ' + endDay + '</div>';
  }, 1);
});


for(var i =0; i < slides.length; i++){
  slidesOffsets.push((slides[i].offsetLeft * -1) + 10);
}
	
swiper.on('sliderMove', function(e){
  currentOffset = this.translate;
		
  for(var i=0; i<slides.length; i++){
    if( slidesOffsets[i] <= currentOffset){				
      startIndex = i ;
      break;
    }
  }
		
  endIndex = startIndex + 6;
  content.innerHTML = '<div> Showing data for days ' + startIndex + ' to ' + endIndex +  '</div>';		
});
Run Code Online (Sandbox Code Playgroud)
html, body {
  position: relative;
  height: 100%;
}
body {
  background: #eee;
  font-family: Helvetica Neue, Helvetica, Arial, sans-serif;
  font-size: 14px;
  color:#000;
  margin: 0;
  padding: 0;
}
.swiper-container {
  width: 100%;
  height: 80px;
}
.swiper-slide {
  text-align: center;
  font-size: 18px;
  background: #fff;
  /* Center slide text vertically */
  display: -webkit-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  -webkit-box-pack: center;
  -ms-flex-pack: center;
  -webkit-justify-content: center;
  justify-content: center;
  -webkit-box-align: center;
  -ms-flex-align: center;
  -webkit-align-items: center;
  align-items: center;
}

#content{
  width: 100%;
	height: calc(100% - 80px);		
}
#content div{			
  margin: auto;
	text-align: center;
	padding-top: 50px;
	font-size: 30px;
}
Run Code Online (Sandbox Code Playgroud)
<link href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.0.2/css/swiper.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/4.2.0/js/swiper.min.js"></script>
<div class="swiper-container">
    <div class="swiper-wrapper">
      <div class="swiper-slide">1</div>
      <div class="swiper-slide">2</div>
      <div class="swiper-slide">3</div>
      <div class="swiper-slide">4</div>
      <div class="swiper-slide">5</div>
      <div class="swiper-slide">6</div>
      <div class="swiper-slide">7</div>
      <div class="swiper-slide">8</div>
      <div class="swiper-slide">9</div>
      <div class="swiper-slide">10</div>
      <div class="swiper-slide">11</div>
      <div class="swiper-slide">12</div>
      <div class="swiper-slide">13</div>
      <div class="swiper-slide">14</div>
      <div class="swiper-slide">15</div>
      <div class="swiper-slide">16</div>
      <div class="swiper-slide">17</div>
      <div class="swiper-slide">18</div>
      <div class="swiper-slide">19</div>
      <div class="swiper-slide">20</div>
      <div class="swiper-slide">21</div>
      <div class="swiper-slide">22</div>
      <div class="swiper-slide">23</div>
      <div class="swiper-slide">24</div>
      <div class="swiper-slide">25</div>
      <div class="swiper-slide">26</div>
      <div class="swiper-slide">27</div>
      <div class="swiper-slide">28</div>
      <div class="swiper-slide">29</div>
      <div class="swiper-slide">30</div>
    </div>
    <!-- Add Pagination -->
    <div class="swiper-pagination"></div>
  </div>
	
	<div id="content">

	</div>
Run Code Online (Sandbox Code Playgroud)

我希望这个帮助能祝你好运.

最终预期结果:https://jsfiddle.net/o9u0qenk/40/