查看: 4311|回复: 0
打印 上一主题 下一主题

angular2 Swiper3 上拉刷新,下拉加载

[复制链接]

该用户从未签到

2

主题

3

帖子

65

积分

注册会员

Rank: 2

积分
65
跳转到指定楼层
楼主
发表于 2016-8-15 16:21:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 小白 于 2016-8-15 16:24 编辑

angular2 还没发布正式版, 网上也有其他的瀑布流插件,觉的不怎么好用,以前我也写过一个ng1的swiper插件, 所以又重新写了一个给大家借鉴一下下面是组件
swiper-scroll.ts

  1. import {Injectable, Inject, Component, ElementRef, Host, Input, EventEmitter, Output} from '@angular/core';
  2. import { AppState } from '../service/app.service'; //数据服务
  3. import { UnitConfig } from '../service/unit.config';//其他配置方法
  4. const Swiper = require('swiper');
  5. @Injectable()
  6. @Component({
  7.   selector: '[swiper-scroll]',
  8.   template:
  9.   `<div class="swiper-container" [ngStyle]="{'height': wheight}">
  10.     <div class="swiper-wrapper">
  11.       <h class="up-slide">下拉刷新</h>
  12.       <ng-content></ng-content>
  13.           <h class="down-slide">上拉加载</h>
  14.     </div>
  15.      </div>`,
  16.   styles: [require('./swiper-scroll.css')]

  17. })
  18. export class SwiperScroll {
  19.   @Input() options: any;//参数
  20.   swiper: any;
  21.   unitconfig: any;
  22.   @Input() pager: any;
  23.   showPager: boolean;
  24.   wheight = "540px";
  25.   @Output() scrollUp: EventEmitter<any> = new EventEmitter();
  26.   @Output() scrollDown: EventEmitter<any> = new EventEmitter();
  27.   constructor(public appState: AppState, @Inject(ElementRef) private elementRef: ElementRef) {
  28.     this.unitconfig = new UnitConfig();
  29.   }
  30.   ngAfterViewInit() {
  31.     // 判断内容区高度
  32.     this.wheight = (window.innerHeight - this.elementRef.nativeElement.parentNode.parentNode.childNodes[1].scrollHeight - this.appState.state.bottom_height) + "px";
  33.   }
  34.   ngOnInit() {
  35.     let $this = this;
  36.     let options = this.unitconfig.defaults({
  37.       direction: 'vertical',
  38.       slidesPerView: "auto",
  39.       onTouchMove: function (swiper) {
  40.       },
  41.       onTouchEnd: function (swiper) {
  42.         let translate = -swiper.translate;
  43.         if (translate < -100) {
  44.           $this.loadUpSlides();
  45.         }
  46.         if (translate - (swiper.virtualSize - swiper.height) > 100) {
  47.           $this.loadDownSlides();
  48.         }
  49.       }

  50.     }, this.options);

  51.     const nativeElement = this.elementRef.nativeElement;
  52.     setTimeout(() => {
  53.       this.swiper = new Swiper(nativeElement.children[0], options);
  54.     });
  55.   }

  56.   public loadUpSlides() {
  57.     setTimeout(() => {
  58.       this.scrollUp.emit("event");
  59.     });
  60.   }
  61.   public loadDownSlides() {
  62.     setTimeout(() => {
  63.       this.scrollDown.emit("event");
  64.     })
  65.   }
  66.   public update() {
  67.     setTimeout(() => {
  68.       this.swiper.update();
  69.     });
  70.   }

  71. }

  72. @Injectable()
  73. @Component({
  74.   selector: '[swiper-slide]',
  75.   template: '<ng-content></ng-content>'
  76. })
  77. export class SwiperSlide {
  78.   private ele: HTMLElement;
  79.   constructor(
  80.     @Inject(ElementRef) elementRef: ElementRef,
  81.     @Host() @Inject(SwiperScroll) swiper: SwiperScroll
  82.   ) {
  83.     this.ele = elementRef.nativeElement;
  84.     this.ele.classList.add('swiper-slide');
  85.     swiper.update();
  86.   }
  87. }
复制代码



引用组件
  1. import { Component,OnInit,AfterViewInit,ViewChild,Injectable, Inject, ElementRef, Host, Input } from '@angular/core';
  2. import { AppState } from '../service/app.service';
  3. import { DataService } from '../service/data.service';
  4. import { UnitConfig } from '../service/unit.config';
  5. import { SwiperScroll, SwiperSlide} from '../directive/swiper-scroll';
  6. @Component({
  7.   selector: 'invest',  
  8.   pipes: [ ],
  9.   providers: [DataService ],
  10.   styles: [ require('./invest.component.css') ],
  11.   template: require('./invest.component.html'),
  12.   directives: [RouterActive,RingContainer ,SwiperScroll, SwiperSlide]
  13. })
  14. export class InvestComponent implements AfterViewInit,OnInit {   
  15.     @ViewChild(SwiperScroll) swiperccroll: SwiperScroll;
  16.     public arraylist:any=[];
  17.     private UnitConfig :any;
  18.     public start = true;

  19.   public ngOnInit()
  20.   {
  21.       this.binData();
  22.         //console.log('Initial App State', this.appState.state);
  23.   }

  24.   private binData()
  25.   {
  26.     let url = 'http://localhost:3000/plugs/home.json';
  27.     this.dataService.getDataGet(url,false).then(data=>this.view(data));
  28.   }
  29.   public view(data)
  30.   {
  31.     this.start = true;

  32.   }

  33.     /**
  34.      * 完成viewChild初始前后执行
  35.      */
  36.   constructor(public appState: AppState,public dataService:DataService, @Inject(ElementRef) private elementRef: ElementRef) {
  37.       this.UnitConfig = new UnitConfig();
  38.   }


  39.   /**
  40.    * 完成viewChild初始化后执行
  41.    */
  42.   public ngAfterViewInit() {
  43.     //console.log(this.swiperContainer);
  44.   }
  45. //下拉加载
  46.   public onScrollDown () {  
  47.         if(this.start)
  48.         {
  49.            this.start = false;
  50.           this.binData();
  51.         }  
  52.     }
  53. // 上拉刷新
  54.   public  onScrollUp () {

  55.    }
  56. }
复制代码



页面
  1.    <ul class="invest_content"   swiper-scroll (scrollDown)="onScrollDown($event)" >
  2.             <li swiper-slide >

  3. </li>
  4. </ul>
复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Swiper中文网 ( 粤ICP备15001020号

GMT+8, 2024-11-23 10:18 , Processed in 0.058650 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表