@lspriv/wx-calendar
Version:
142 lines (141 loc) • 4.59 kB
TypeScript
import { CalendarHandler } from '../interface/component';
import type { CalendarMonth, WcFullYear } from '../interface/calendar';
declare global {
interface HTMLCanvasElement {
/**
* 在下次进行重绘时执行。 支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。
* @param callback 执行的 callback
* @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.requestAnimationFrame.html
*/
requestAnimationFrame(callback: () => void): number;
/**
* 取消由 requestAnimationFrame 添加到计划中的动画帧请求。支持在 2D Canvas 和 WebGL Canvas 下使用, 但不支持混用 2D 和 WebGL 的方法。
* @param requestID requestAnimationFrame返回的请求 ID
* @see https://developers.weixin.qq.com/miniprogram/dev/api/canvas/Canvas.cancelAnimationFrame.html
*/
cancelAnimationFrame(requestID: number): void;
}
}
interface CanvasElementSize {
width: number;
height: number;
}
interface Canvas extends CanvasElementSize {
ctx: CanvasRenderingContext2D | null;
canvas: HTMLCanvasElement | null;
frame: number;
state: PrinterState;
rendered: boolean;
year?: number;
}
declare enum PrinterState {
minimize = 1,
maximize = 2
}
export declare class YearPrinter extends CalendarHandler {
private _canvas_;
private _weeks_;
private _week_size_;
private _week_height_;
private _week_padding_y_;
private _date_size_;
private _date_height_;
private _panel_padding_;
private _month_padding_;
private _title_size_;
private _title_height_;
private _title_padding_x_;
private _title_padding_y_;
private _mark_width_;
private _mark_height_;
private _checked_radius_max_;
private _checked_offset_max_;
/** 最大化状态下面板水平偏移量(根据选择月份计算) */
private _translate_x_;
/** 最大化状态下面板垂直偏移量(根据选择月份计算) */
private _translate_y_;
/** 日历组件左侧处于页面中的位置 */
private _calendar_x_;
/** 日历组件顶端处于页面中的位置 */
private _calendar_y_;
/** 非自定义页面导航栏的情况下年度面板需要考虑头部高度 */
private _header_offset_;
/** 字体 */
private _font_;
private _style_;
private _colors_;
/** 处理系统深色模式的监听 */
private _theme_listener_?;
renderCheckedBg: boolean;
initialize(): Promise<void>;
private initializeSize;
initializeColors(): void;
private initializeCanvas;
private initializeRender;
private color;
private renderFrame;
private calcDateOuterHeight;
private attachChecked;
render(canvas: Canvas, year: WcFullYear, month?: number): void;
private renderMonth;
private renderMonthTitle;
private renderWeek;
private renderChecked;
private renderDates;
private renderMark;
private renderDateBg;
private dateBgRadius;
/**
* 是否周末日
* @param wdx 周内index
*/
private isWeekend;
private requestAnimation;
private requestAnimationFrame;
private getCanvas;
private initializeTransform;
/**
* 检查有未初始化的画布
* @param excludes 排除检查的画布索引
*/
private checkInitializeRender;
/**
* 重置为最小化状态
* @param canvas 画布
* @param year 年度
*/
renderMinimize(canvas: Canvas, year: WcFullYear): void;
/**
* 年度面板打开动画
* @param mon 指定月份
* @param rect 日历在页面的位置信息
* @param prepose 动画开始之前的操作
*/
open(mon: CalendarMonth, rect: WechatMiniprogram.BoundingClientRectCallbackResult, propose?: () => void): Promise<void>;
/**
* 年度面板关闭动画
* @param mon 指定月份
*/
close(mon: CalendarMonth): Promise<void>;
/**
* 点击画布获取对应的月份
* @param ydx 年度数组索引
* @param x 点击位置水平坐标
* @param y 点击位置垂直坐标
*/
getTapMonth(ydx: number, x: number, y: number): Promise<CalendarMonth>;
/**
* 更新
* @param idxs 年度数组索引
*/
update(idxs?: number[]): void;
/**
* 绑定系统主题改变事件的监听
*/
bindThemeChange(): void;
/**
* 移除系统主题改变事件的监听
*/
cancelThemeChange(): void;
}
export {};