1
0
mirror of https://gitee.com/vant-contrib/vant.git synced 2025-04-06 03:57:59 +08:00

fix(Calendar): incorrect height when using rem ()

* fix(Calendar): incorrect height when using rem

* fix: realRowHeight default value
This commit is contained in:
neverland 2020-09-16 21:07:11 +08:00 committed by GitHub
parent 2e6e5a934b
commit 35f7e818e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 41 additions and 21 deletions
src/calendar

@ -4,7 +4,6 @@ import {
t, t,
bem, bem,
compareDay, compareDay,
ROW_HEIGHT,
getPrevDay, getPrevDay,
getNextDay, getNextDay,
formatMonthTitle, formatMonthTitle,
@ -27,6 +26,7 @@ export default createComponent({
currentDate: [Date, Array], currentDate: [Date, Array],
allowSameDay: Boolean, allowSameDay: Boolean,
showSubtitle: Boolean, showSubtitle: Boolean,
realRowHeight: Number,
showMonthTitle: Boolean, showMonthTitle: Boolean,
firstDayOfWeek: Number, firstDayOfWeek: Number,
}, },
@ -43,9 +43,7 @@ export default createComponent({
}, },
rowHeightWithUnit() { rowHeightWithUnit() {
if (this.rowHeight !== ROW_HEIGHT) { return addUnit(this.rowHeight);
return addUnit(this.rowHeight);
}
}, },
offset() { offset() {
@ -71,7 +69,7 @@ export default createComponent({
monthStyle() { monthStyle() {
if (!this.shouldRender) { if (!this.shouldRender) {
const padding = const padding =
Math.ceil((this.totalDay + this.offset) / 7) * this.rowHeight; Math.ceil((this.totalDay + this.offset) / 7) * this.realRowHeight;
return { return {
paddingBottom: `${padding}px`, paddingBottom: `${padding}px`,
@ -106,6 +104,23 @@ export default createComponent({
}, },
}, },
watch: {
shouldRender(value) {
if (value) {
this.$nextTick(() => {
if (this.$refs.day[0] && !this.realRowHeight) {
const { height } = this.$refs.day[0].getBoundingClientRect();
this.$emit('update-height', height);
}
});
}
},
realRowHeight() {
this.height = null;
},
},
methods: { methods: {
getHeight() { getHeight() {
if (!this.height) { if (!this.height) {
@ -289,6 +304,8 @@ export default createComponent({
if (type === 'selected') { if (type === 'selected') {
return ( return (
<div <div
ref="day"
refInFor
role="gridcell" role="gridcell"
style={style} style={style}
class={[bem('day'), item.className]} class={[bem('day'), item.className]}
@ -313,6 +330,8 @@ export default createComponent({
return ( return (
<div <div
ref="day"
refInFor
role="gridcell" role="gridcell"
style={style} style={style}
class={[bem('day', type), item.className]} class={[bem('day', type), item.className]}

@ -8,7 +8,6 @@ import {
copyDates, copyDates,
getNextDay, getNextDay,
compareDay, compareDay,
ROW_HEIGHT,
calcDateNum, calcDateNum,
compareMonth, compareMonth,
createComponent, createComponent,
@ -29,6 +28,7 @@ export default createComponent({
value: Boolean, value: Boolean,
readonly: Boolean, readonly: Boolean,
formatter: Function, formatter: Function,
rowHeight: [Number, String],
confirmText: String, confirmText: String,
rangePrompt: String, rangePrompt: String,
defaultDate: [Date, Array], defaultDate: [Date, Array],
@ -51,10 +51,6 @@ export default createComponent({
type: Boolean, type: Boolean,
default: true, default: true,
}, },
rowHeight: {
type: [Number, String],
default: ROW_HEIGHT,
},
maxRange: { maxRange: {
type: [Number, String], type: [Number, String],
default: null, default: null,
@ -115,6 +111,7 @@ export default createComponent({
return { return {
subtitle: '', subtitle: '',
currentDate: this.getInitialDate(), currentDate: this.getInitialDate(),
realRowHeight: 0,
}; };
}, },
@ -403,6 +400,10 @@ export default createComponent({
this.$emit('confirm', copyDates(this.currentDate)); this.$emit('confirm', copyDates(this.currentDate));
}, },
onUpdateHeight(height) {
this.realRowHeight = height;
},
genMonth(date, index) { genMonth(date, index) {
const showMonthTitle = index !== 0 || !this.showSubtitle; const showMonthTitle = index !== 0 || !this.showSubtitle;
return ( return (
@ -421,9 +422,11 @@ export default createComponent({
currentDate={this.currentDate} currentDate={this.currentDate}
showSubtitle={this.showSubtitle} showSubtitle={this.showSubtitle}
allowSameDay={this.allowSameDay} allowSameDay={this.allowSameDay}
realRowHeight={this.realRowHeight}
showMonthTitle={showMonthTitle} showMonthTitle={showMonthTitle}
firstDayOfWeek={this.dayOffset} firstDayOfWeek={this.dayOffset}
onClick={this.onClickDay} onClick={this.onClickDay}
onUpdate-height={this.onUpdateHeight}
/> />
); );
}, },

@ -64,7 +64,7 @@ exports[`renders demo correctly 1`] = `
<div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div> <div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div>
</div> </div>
<div class="van-calendar__body"> <div class="van-calendar__body">
<div class="van-calendar__month" style="padding-bottom: 320px;"> <div class="van-calendar__month" style="padding-bottom: 0px;">
<div role="grid" class="van-calendar__days"> <div role="grid" class="van-calendar__days">
<div class="van-calendar__month-mark">1</div> <div class="van-calendar__month-mark">1</div>
<div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="margin-left: 0%;">1</div> <div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="margin-left: 0%;">1</div>
@ -102,7 +102,7 @@ exports[`renders demo correctly 1`] = `
<div role="gridcell" tabindex="-1" class="van-calendar__day">31</div> <div role="gridcell" tabindex="-1" class="van-calendar__day">31</div>
</div> </div>
</div> </div>
<div class="van-calendar__month" style="padding-bottom: 320px;"> <div class="van-calendar__month" style="padding-bottom: 0px;">
<div class="van-calendar__month-title">2012年2月</div> <div class="van-calendar__month-title">2012年2月</div>
<div role="grid" class="van-calendar__days"> <div role="grid" class="van-calendar__days">
<div class="van-calendar__month-mark">2</div> <div class="van-calendar__month-mark">2</div>
@ -137,7 +137,7 @@ exports[`renders demo correctly 1`] = `
<div role="gridcell" tabindex="-1" class="van-calendar__day">29</div> <div role="gridcell" tabindex="-1" class="van-calendar__day">29</div>
</div> </div>
</div> </div>
<div class="van-calendar__month" style="padding-bottom: 320px;"> <div class="van-calendar__month" style="padding-bottom: 0px;">
<div class="van-calendar__month-title">2012年3月</div> <div class="van-calendar__month-title">2012年3月</div>
<div role="grid" class="van-calendar__days"> <div role="grid" class="van-calendar__days">
<div class="van-calendar__month-mark">3</div> <div class="van-calendar__month-mark">3</div>

@ -8,7 +8,7 @@ exports[`color prop when type is range 1`] = `
<div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div> <div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div>
</div> </div>
<div class="van-calendar__body"> <div class="van-calendar__body">
<div class="van-calendar__month" style="padding-bottom: 384px;"> <div class="van-calendar__month" style="padding-bottom: 0px;">
<div role="grid" class="van-calendar__days"> <div role="grid" class="van-calendar__days">
<div class="van-calendar__month-mark">1</div> <div class="van-calendar__month-mark">1</div>
<div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="margin-left: 71.42857142857143%;">1</div> <div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="margin-left: 71.42857142857143%;">1</div>
@ -61,7 +61,7 @@ exports[`color prop when type is single 1`] = `
<div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div> <div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div>
</div> </div>
<div class="van-calendar__body"> <div class="van-calendar__body">
<div class="van-calendar__month" style="padding-bottom: 384px;"> <div class="van-calendar__month" style="padding-bottom: 0px;">
<div role="grid" class="van-calendar__days"> <div role="grid" class="van-calendar__days">
<div class="van-calendar__month-mark">1</div> <div class="van-calendar__month-mark">1</div>
<div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="margin-left: 71.42857142857143%;">1</div> <div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="margin-left: 71.42857142857143%;">1</div>
@ -114,7 +114,7 @@ exports[`formatter prop 1`] = `
<div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div> <div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div>
</div> </div>
<div class="van-calendar__body"> <div class="van-calendar__body">
<div class="van-calendar__month" style="padding-bottom: 384px;"> <div class="van-calendar__month" style="padding-bottom: 0px;">
<div role="grid" class="van-calendar__days"> <div role="grid" class="van-calendar__days">
<div class="van-calendar__month-mark">1</div> <div class="van-calendar__month-mark">1</div>
<div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="margin-left: 71.42857142857143%;">1</div> <div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="margin-left: 71.42857142857143%;">1</div>
@ -173,7 +173,7 @@ exports[`popup wrapper 2`] = `
<div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div> <div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div>
</div> </div>
<div class="van-calendar__body"> <div class="van-calendar__body">
<div class="van-calendar__month" style="padding-bottom: 384px;"> <div class="van-calendar__month" style="padding-bottom: 0px;">
<div role="grid" class="van-calendar__days"> <div role="grid" class="van-calendar__days">
<div class="van-calendar__month-mark">1</div> <div class="van-calendar__month-mark">1</div>
<div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="margin-left: 71.42857142857143%;">1</div> <div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="margin-left: 71.42857142857143%;">1</div>
@ -228,7 +228,7 @@ exports[`row-height prop 1`] = `
<div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div> <div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div>
</div> </div>
<div class="van-calendar__body"> <div class="van-calendar__body">
<div class="van-calendar__month" style="padding-bottom: 300px;"> <div class="van-calendar__month" style="padding-bottom: 0px;">
<div role="grid" class="van-calendar__days"> <div role="grid" class="van-calendar__days">
<div class="van-calendar__month-mark">1</div> <div class="van-calendar__month-mark">1</div>
<div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="height: 50px; margin-left: 71.42857142857143%;">1</div> <div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="height: 50px; margin-left: 71.42857142857143%;">1</div>
@ -281,7 +281,7 @@ exports[`title & footer slot 1`] = `
<div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div> <div class="van-calendar__weekdays"><span class="van-calendar__weekday">日</span><span class="van-calendar__weekday">一</span><span class="van-calendar__weekday">二</span><span class="van-calendar__weekday">三</span><span class="van-calendar__weekday">四</span><span class="van-calendar__weekday">五</span><span class="van-calendar__weekday">六</span></div>
</div> </div>
<div class="van-calendar__body"> <div class="van-calendar__body">
<div class="van-calendar__month" style="padding-bottom: 384px;"> <div class="van-calendar__month" style="padding-bottom: 0px;">
<div role="grid" class="van-calendar__days"> <div role="grid" class="van-calendar__days">
<div class="van-calendar__month-mark">1</div> <div class="van-calendar__month-mark">1</div>
<div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="margin-left: 71.42857142857143%;">1</div> <div role="gridcell" class="van-calendar__day van-calendar__day--disabled" style="margin-left: 71.42857142857143%;">1</div>

@ -4,8 +4,6 @@ const [createComponent, bem, t] = createNamespace('calendar');
export { createComponent, bem, t }; export { createComponent, bem, t };
export const ROW_HEIGHT = 64;
export function formatMonthTitle(date: Date) { export function formatMonthTitle(date: Date) {
return t('monthTitle', date.getFullYear(), date.getMonth() + 1); return t('monthTitle', date.getFullYear(), date.getMonth() + 1);
} }