123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- import { Component, AfterViewInit } from '@angular/core';
- import { Router } from '@angular/router';
- @Component({
- selector: 'app-tab1',
- templateUrl: 'tab1.page.html',
- styleUrls: ['tab1.page.scss']
- })
- export class Tab1Page implements AfterViewInit {
- doctors = [
- {
- avatar: '../../assets/images/doctor.png',
- name: '张医生',
- specialty: '心血管科'
- },
- {
- avatar: '../../assets/images/doctor.png',
- name: '李医生',
- specialty: '神经科'
- },
- {
- avatar: '../../assets/images/doctor.png',
- name: '王医生',
- specialty: '儿科'
- },
- {
- avatar: '../../assets/images/doctor.png',
- name: '赵医生',
- specialty: '外科'
- },
- {
- avatar: '../../assets/images/doctor.png',
- name: '陈医生',
- specialty: '内科'
- }
- ];
- // 功能按钮数据
- functionItems1 = [
- { label: '我的病历', icon: 'document-text', route: '/medical-records' },
- { label: '在线问诊', icon: 'chatbubbles', route: '/online-consultation' },
- { label: '健康档案', icon: 'person', route: '/health-profile' },
- { label: '预约挂号', icon: 'calendar', route: '/appointment' },
- { label: '健康资讯', icon: 'newspaper', route: '/health-news' }
- ];
- functionItems2 = [
- { label: '药品购买', icon: 'medkit', route: '/medicine-purchase' },
- { label: '体检套餐', icon: 'clipboard', route: '/checkup-packages' },
- { label: '专家讲座', icon: 'podium', route: '/expert-lectures' },
- { label: '远程医疗', icon: 'videocam', route: '/telemedicine' },
- { label: '健康社区', icon: 'people', route: '/health-community' }
- ];
- currentIndex = 0;
- startX: number = 0; // 初始化 startX
- endX: number = 0; // 初始化 endX
- isDragging: boolean = false; // 标记是否正在拖动
- currentTranslate: number = 0; // 当前的平移值
- cardWidth = 216; // 每个卡片的宽度加上间距 (200 + 16)
- isCyclic: boolean = true; // 是否启用循环滑动
- constructor(private router: Router) {}
- ngAfterViewInit() {
- this.updateCarousel(); // 确保初始状态正确
- this.calculateCardWidth(); // 动态计算卡片宽度
- }
- // 计算卡片宽度
- calculateCardWidth() {
- const container = document.getElementById('carousel');
- if (container && container.children.length > 0) {
- const firstCard = container.children[0] as HTMLElement;
- this.cardWidth = firstCard.offsetWidth + 16; // 加上间距
- }
- }
- // 更新轮播位置
- updateCarousel() {
- this.currentTranslate = -this.currentIndex * this.cardWidth;
- this.updateCarouselPosition();
- }
- // 更新轮播位置
- updateCarouselPosition() {
- const container = document.getElementById('carousel');
- if (container) {
- container.style.transform = `translateX(${this.currentTranslate}px)`;
- }
- }
- // 触摸开始
- onTouchStart(event: TouchEvent) {
- // event.preventDefault(); // 防止默认行为
- this.startX = event.touches[0].clientX;
- this.isDragging = true;
- }
- // 触摸移动
- onTouchMove(event: TouchEvent) {
- if (this.isDragging) {
- // event.preventDefault(); // 防止默认行为
- const touchX = event.touches[0].clientX;
- const deltaX = touchX - this.startX;
- this.currentTranslate = -this.currentIndex * this.cardWidth + deltaX; // 动态更新平移值
- // 限制 currentTranslate 的值
- const maxTranslate = -(this.doctors.length - 1) * this.cardWidth;
- this.currentTranslate = Math.max(Math.min(this.currentTranslate, 0), maxTranslate);
- this.updateCarouselPosition();
- }
- }
- // 触摸结束
- onTouchEnd(event: TouchEvent) {
- this.endX = event.changedTouches[0].clientX;
- this.isDragging = false;
- const swipeThreshold = 50; // 滑动阈值
- const deltaX = this.startX - this.endX;
- if (deltaX > swipeThreshold) {
- // 向左滑动
- this.nextSlide();
- } else if (deltaX < -swipeThreshold) {
- // 向右滑动
- this.prevSlide();
- } else {
- // 如果滑动距离不够,则恢复到原来的位置
- this.snapToNearestCard();
- }
- }
- // 上一张
- prevSlide() {
- if (this.isCyclic) {
- if (this.currentIndex === 0) {
- this.currentIndex = this.doctors.length - 1;
- } else {
- this.currentIndex--;
- }
- } else {
- if (this.currentIndex > 0) {
- this.currentIndex--;
- }
- }
- this.updateCarousel();
- }
- // 下一张
- nextSlide() {
- if (this.isCyclic) {
- if (this.currentIndex === this.doctors.length - 1) {
- this.currentIndex = 0;
- } else {
- this.currentIndex++;
- }
- } else {
- if (this.currentIndex < this.doctors.length - 1) {
- this.currentIndex++;
- }
- }
- this.updateCarousel();
- }
- // 快照到最近的卡片
- snapToNearestCard() {
- const cardIndex = Math.round(-this.currentTranslate / this.cardWidth);
- this.currentIndex = Math.max(0, Math.min(cardIndex, this.doctors.length - 1));
- this.updateCarousel();
- }
- // 导航到指定路由
- navigateTo(route: string) {
- this.router.navigate([route]);
- }
- // 发布求医信息
- publishHealthInfo() {
- // 这里可以添加发布求医信息的逻辑
- console.log('发布求医信息');
- }
- }
|