diff --git a/src/components/bookCardItem/bookCardItem.css b/src/components/bookCardItem/bookCardItem.css index 69192dec..f7fa4746 100644 --- a/src/components/bookCardItem/bookCardItem.css +++ b/src/components/bookCardItem/bookCardItem.css @@ -1,15 +1,16 @@ .book-list-item { - width: 133px; + width: calc(133px * var(--card-scale, 1)); /* height: 192px; */ float: left; overflow: hidden; position: relative; } .book-item-cover { - width: 105px; + width: calc(105px * var(--card-scale, 1)); /* height: 137px; */ opacity: 1; - margin: 10px 15px 5px 15px; + margin: calc(10px * var(--card-scale, 1)) calc(15px * var(--card-scale, 1)) + calc(5px * var(--card-scale, 1)) calc(15px * var(--card-scale, 1)); cursor: pointer; /* overflow: hidden; */ display: flex; diff --git a/src/components/bookCardItem/component.tsx b/src/components/bookCardItem/component.tsx index c60ab39e..f03a019c 100644 --- a/src/components/bookCardItem/component.tsx +++ b/src/components/bookCardItem/component.tsx @@ -154,13 +154,13 @@ class BookCardItem extends React.Component { style={ ConfigService.getReaderConfig("isDisableCrop") === "yes" ? { - height: "168px", + height: `${168 * (this.props.cardScale ?? parseFloat(ConfigService.getReaderConfig("cardScale") || "1"))}px`, alignItems: "flex-end", background: "rgba(255, 255,255, 0)", boxShadow: "0px 0px 5px rgba(0, 0, 0, 0)", } : { - height: "137px", + height: `${137 * (this.props.cardScale ?? parseFloat(ConfigService.getReaderConfig("cardScale") || "1"))}px`, alignItems: "center", overflow: "hidden", } diff --git a/src/components/bookCardItem/interface.tsx b/src/components/bookCardItem/interface.tsx index 6c9f2c6a..beebd93c 100644 --- a/src/components/bookCardItem/interface.tsx +++ b/src/components/bookCardItem/interface.tsx @@ -10,6 +10,7 @@ export interface BookCardProps extends RouteComponentProps { dragItem: string; selectedBooks: string[]; refreshBookKey: string; + cardScale?: number; handleSelectBook: (isSelectBook: boolean) => void; handleReadingBook: (book: BookModel) => void; handleActionDialog: (isShowActionDialog: boolean) => void; diff --git a/src/containers/lists/bookList/booklist.css b/src/containers/lists/bookList/booklist.css index 020b8a2d..4e09d402 100644 --- a/src/containers/lists/bookList/booklist.css +++ b/src/containers/lists/bookList/booklist.css @@ -104,3 +104,35 @@ display: flex; align-items: center; } +.book-card-scale-slider { + -webkit-appearance: none; + appearance: none; + width: 120px !important; + height: 4px; + border-radius: 2px; + outline: none; + cursor: pointer; + margin-right: 10px; + opacity: 1; + transition: opacity 0.2s; +} +.book-card-scale-slider:hover { + opacity: 1; +} +.book-card-scale-slider::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 16px !important; + height: 16px !important; + border-radius: 50%; + cursor: pointer; + margin-top: 2px; +} +.book-card-scale-slider::-moz-range-thumb { + width: 16px !important; + height: 16px !important; + border-radius: 50%; + border: none; + cursor: pointer; + margin-top: 2px; +} diff --git a/src/containers/lists/bookList/component.tsx b/src/containers/lists/bookList/component.tsx index 07e4abd1..edea2063 100644 --- a/src/containers/lists/bookList/component.tsx +++ b/src/containers/lists/bookList/component.tsx @@ -46,6 +46,7 @@ class BookList extends React.Component { displayedBooksCount: 24, isLoadingMore: false, fullBooksData: [], // 存储从数据库加载的完整书籍数据 + cardScale: parseFloat(ConfigService.getReaderConfig("cardScale") || "1"), }; } UNSAFE_componentWillMount() { @@ -268,6 +269,12 @@ class BookList extends React.Component { ); }); }; + handleCardScaleChange = (e: React.ChangeEvent) => { + const scale = parseFloat(e.target.value); + this.setState({ cardScale: scale }); + ConfigService.setReaderConfig("cardScale", String(scale)); + }; + renderBookList = (books: Book[], bookMode: string) => { if (books.length === 0 && !this.props.isSearch) { return ; @@ -295,6 +302,7 @@ class BookList extends React.Component { {...{ key: index, book: item, + cardScale: this.state.cardScale, isSelected: this.props.selectedBooks.indexOf(item.key) > -1, }} /> @@ -363,6 +371,18 @@ class BookList extends React.Component { style={this.props.isSelectBook ? { display: "none" } : {}} className="book-list-header-right" > + {this.props.viewMode === "card" && ( + + )}
{"Total " + books.length + " books"} @@ -380,7 +400,13 @@ class BookList extends React.Component { } >
-
    +
      {this.renderBookList(books, bookMode)}
diff --git a/src/containers/lists/bookList/interface.tsx b/src/containers/lists/bookList/interface.tsx index 78cf759f..66d72948 100644 --- a/src/containers/lists/bookList/interface.tsx +++ b/src/containers/lists/bookList/interface.tsx @@ -29,4 +29,5 @@ export interface BookListState { displayedBooksCount: number; isLoadingMore: boolean; fullBooksData: BookModel[]; + cardScale: number; }