收藏
回答

swiper中在第一个和最后一个还是可以左右滑动?

基础版本库3.4.1

这个是js代码部分

import { asyncSetStorage, asyncGetStorage } from "@/utils/storage";

import { dataCourse } from "@/api/course";


Page({

  data: {

    nowWeek: 1, // 当前周

    tempWeek: null,

    totalWeek: 22, // 周总数

    totalWeeks: [],

    weekRange: [],

    swiperDirection: null, // 新增的数据属性,用于跟踪swiper组件的滑动方向

    swiperIndex: 0, // 新增的数据属性,用于跟踪swiper组件的当前索引

    showModal: false, // 控制模态对话框的显示和隐藏

    weekDayCount: 7,

    startDate: "2023/02/20", // 开学日期

    weekIndexText: ["", "", "", "", "", "", ""],

    nowMonth: 1, // 当前周的月份

    courseList: [],

    colorList: [

      "#FFDAB9",

      "#90EE90",

      "#AFEEEE",

      "#FFB6C1",

      "#ADD8E6",

      "#E0FFFF",

      "#FFDAB9",

      "#90EE90",

      "#AFEEEE",

      "#FFB6C1",

      "#ADD8E6",

      "#E0FFFF",

      "#FFDAB9",

      "#90EE90",

    ],

    courseColor: {},

    weekCalendar: [0, 1, 2, 3, 4, 5, 6],

    date_day_list: [],

    firstEntry: true,

    weekItemWidth: 0, // 初始值

  },


  getDate(offset = 0) {

    let date = new Date();


    // 计算当前周的起始日期

    let firstDayOfWeek = new Date(

      date.setDate(date.getDate() - date.getDay() + 1)

    );


    let weekCalendar = [];


    for (let index = 0; index < 7; index++{

      let newDate = new Date(firstDayOfWeek);

      newDate.setDate(firstDayOfWeek.getDate() + index + offset * 7);


      let month = newDate.getMonth() + 1;

      let day = newDate.getDate();


      // 将日期加入weekCalendar

      weekCalendar.push(`${month}/${day}`);

    }


    this.setData({

      weekCalendar,

      nowMonth: weekCalendar[0].split("/")[0], // 更新月份

    });

  },


  async onShow() {

    this.getDate();

    let weekRange = [];

    for (let i = 1; i <= this.data.totalWeek; i++{

      weekRange.push("" + i + "");

    }

    let nowWeek = wx.getStorageSync("nowWeek");

    if (!nowWeek{

      nowWeek = 1; // 设置默认周数为第一周

    }

    this.setData({

      weekRange,

      nowWeek,

    });

    this.course_data();

  },


  showModal() {

    this.setData({ showModal: true }); // 显示模态对话框

  },


  toggleModal() {

    this.setData({

      showModal: !this.data.showModal,

    });

  },


  async selectWeek(e) {

    this.setData({

      nowWeek: e.currentTarget.dataset.week, // 更新当前周数

      showModal: false,

    });

    asyncSetStorage("nowWeek", e.currentTarget.dataset.week);

  },


  async swiperSwitchWeek(e) {

    const { current, source } = e.detail;


    if (source === "touch"{

      const tempWeek = this.data.tempWeek || this.data.swiperIndex; // 使用tempWeek或swiperIndex作为当前索引


      const newWeek = this.data.nowWeek + (current - tempWeek);


      // 检查是否到达左边界

      if (newWeek < 1{

        if (current < tempWeek{

          this.setData({

            swiperIndex: tempWeek, // 保持当前swiper位置不变

          });

        }

        return;

      }


      // 检查是否到达右边界

      if (newWeek > this.data.totalWeek{

        if (current > tempWeek{

          this.setData({

            swiperIndex: tempWeek, // 保持当前swiper位置不变

          });

        }

        return;

      }


      // 如果没有达到边界,正常处理

      this.setData({

        swiperIndex: current, // 更新swiper位置

        nowWeek: newWeek, // 更新当前周数

      });

    }

  },


  async course_data(options) {

    var that = this;

    // 请求后端数据

    const { data } = await dataCourse();


    // 整理课程数据

    let courseData = []; // 存储整理后的课程数据

    for (let key in data{

      let course = data[key]; // 获取每门课程的信息

      let weeksAndPeriods = course.Weeks_and_Periods; // 获取课程的上课时间安排


      let i = 1;


      let z = 1;

      // 遍历课程的上课时间安排

      for (let week in weeksAndPeriods{

        let j = 1;

        let periods = weeksAndPeriods[week].split("-"); // 将上课节数拆分成数组

        periods.forEach((period) => {

          let weekIndex = parseInt(week- 1; // 将周数转换为数组索引

          let dayIndex = parseInt(course.week_day- 1; // 将星期几转换为数组索引

          let periodIndex = parseInt(period- 1; // 将课程数转换为数组索引


          // 构造课程对象

          let courseItem = {

            Class: course.Class,

            Course: course.Course,

            Teacher: course.Teacher,

            Location: course.Location,

            class_num: course.class_num,

            course_num: course.course_num,

            week_day: course.week_day,

            count: i,

            color: this.getRandomLightColor(),

          };

          if (periods.length > 2{

            courseItem.course_length = periods.length;

            courseItem.go = j;

          } else {

            courseItem.duan = z;

          }

          i += 1;

          j += 1;

          z += 1;


          // 确保对应位置存在数组,避免空指针异常

          if (!courseData[weekIndex]) {

            courseData[weekIndex= [];

          }

          if (!courseData[weekIndex][dayIndex]) {

            courseData[weekIndex][dayIndex= [];

          }

          if (!courseData[weekIndex][dayIndex][periodIndex]) {

            courseData[weekIndex][dayIndex][periodIndex= [];

          }


          // 将课程对象添加到对应的位置

          // 检查该位置是否已经有课程对象

          if (courseData[weekIndex][dayIndex][periodIndex].length === 0{

            // 如果没有课程对象,才添加课程对象

            courseData[weekIndex][dayIndex][periodIndex].push(courseItem);

          }

        });

      }

    }


    // 循环14次,如果没有值就用null填充

    for (let weekIndex = 0; weekIndex < 22; weekIndex++{

      for (let dayIndex = 0; dayIndex < 7; dayIndex++{

        for (let periodIndex = 0; periodIndex < 14; periodIndex++{

          if (!courseData[weekIndex]) {

            courseData[weekIndex= [];

          }

          if (!courseData[weekIndex][dayIndex]) {

            courseData[weekIndex][dayIndex= [];

          }

          if (!courseData[weekIndex][dayIndex][periodIndex]) {

            courseData[weekIndex][dayIndex][periodIndex= null;

          }

        }

      }

    }


    wx.getSystemInfo({

      success: function (res) {

        var windowWidth = res.windowWidth; // 获取屏幕的宽度

        let weekItemWidth = (windowWidth - 50/ 7; // 计算weekItemWidth的值

        that.setData({

          weekItemWidth: weekItemWidth,

        });

      },

    });


    wx.setStorageSync("courseData", courseData);


    // 更新数据

    this.setData({

      courseData: courseData,

    });

  },


  getRandomLightColor() {

    // 生成随机的 R、G、B 分量(200-255),确保颜色较浅

    const r = Math.floor(Math.random() * 56+ 200;

    const g = Math.floor(Math.random() * 56+ 200;

    const b = Math.floor(Math.random() * 56+ 200;


    // 将 RGB 转换为十六进制表示

    const hex =

      "#" + ((1 << 24+ (r << 16+ (g << 8+ b).toString(16).slice(1);


    return hex;

  },


  detail_course(e) {

    const { _relatedInfo } = e;

    console.log(_relatedInfo);

    let title =

      typeof _relatedInfo.anchorTargetText === "string"

        ? _relatedInfo.anchorTargetText

        : "默认标题";

    let content =

      typeof _relatedInfo.anchorRelatedText === "string"

        ? _relatedInfo.anchorRelatedText

        : "默认内容";

    wx.showModal({

      title: title,

      showCancel: false,

    });

  },

});



回答关注问题邀请回答
收藏
登录 后发表内容