From ae96c341f09f84809fc1e74a551f1e3785de8545 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=B0=B1=E7=9C=A0=E5=84=80=E5=BC=8F?= <854085467@qq.com>
Date: Fri, 18 Mar 2022 12:56:00 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20carousel-item=20?=
=?UTF-8?q?=E6=97=A0=E6=B3=95=E5=B5=8C=E5=A5=97=20v-for=20=E6=B8=B2?=
=?UTF-8?q?=E6=9F=93?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
example/docs/zh-CN/components/carousel.md | 39 ++
example/docs/zh-CN/guide/changelog.md | 1 +
src/component/carousel/index.less | 548 +++++++++++-----------
src/component/carousel/index.ts | 2 +-
src/component/carousel/index.vue | 57 ++-
src/component/carouselItem/index.vue | 5 +-
src/component/tab/index.vue | 2 +-
7 files changed, 364 insertions(+), 290 deletions(-)
diff --git a/example/docs/zh-CN/components/carousel.md b/example/docs/zh-CN/components/carousel.md
index 59f7bdd1..d51a2d06 100644
--- a/example/docs/zh-CN/components/carousel.md
+++ b/example/docs/zh-CN/components/carousel.md
@@ -118,6 +118,45 @@ export default {
:::
+::: title 动态遍历
+:::
+
+::: demo
+
+
+
+
+ {{ item.text }}
+
+
+
+
+
+
+:::
+
+
::: title Carousel 属性
:::
diff --git a/example/docs/zh-CN/guide/changelog.md b/example/docs/zh-CN/guide/changelog.md
index 13823231..42ff150c 100644
--- a/example/docs/zh-CN/guide/changelog.md
+++ b/example/docs/zh-CN/guide/changelog.md
@@ -23,6 +23,7 @@
[新增] page 分页组件 v-model 属性, 支持默认页设置。
[新增] date-picker 日期选择组件, 支持年月, 日期, 时间。
[新增] transfer 穿梭框组件 showSearch 开启搜索属性。
+ [修复] carousel-item 轮播项使用 v-for 无法渲染。
[修复] checkbox 复选框组件, 选中颜色丢失。
[修复] slider 滑块组件, 默认 step 值异常。
[升级] layer-vue 1.3.10 版本。
diff --git a/src/component/carousel/index.less b/src/component/carousel/index.less
index 06e2a975..ab6a753a 100644
--- a/src/component/carousel/index.less
+++ b/src/component/carousel/index.less
@@ -1,278 +1,276 @@
@import "../../theme/variable.less";
-
.layui-carousel {
- position: relative;
- left: 0;
- top: 0;
- background-color: #f8f8f8;
- }
-
- .layui-carousel > [carousel-item] {
- position: relative;
- width: 100%;
- height: 100%;
- overflow: hidden;
- }
-
- .layui-carousel > [carousel-item]:before {
- position: absolute;
- content: "\e63d";
- left: 50%;
- top: 50%;
- width: 100px;
- line-height: 20px;
- margin: -10px 0 0 -50px;
- text-align: center;
- color: @global-neutral-color-8;
- font-family: layui-icon !important;
- font-size: 30px;
- font-style: normal;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- }
-
- .layui-carousel > [carousel-item] > * {
- display: none;
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- background-color: #f8f8f8;
- transition-duration: 0.3s;
- -webkit-transition-duration: 0.3s;
- }
-
- .layui-carousel-updown > * {
- -webkit-transition: 0.3s ease-in-out up;
- transition: 0.3s ease-in-out up;
- }
-
- .layui-carousel-arrow {
- display: none\9;
- opacity: 0;
- position: absolute;
- left: 10px;
- top: 50%;
- margin-top: -18px;
- width: 36px;
- height: 36px;
- line-height: 36px;
- text-align: center;
- font-size: 20px;
- border: 0;
- border-radius: 50%;
- background-color: rgba(0, 0, 0, 0.2);
- color: #fff;
- -webkit-transition-duration: 0.3s;
- transition-duration: 0.3s;
- cursor: pointer;
- }
-
- .layui-carousel-arrow[lay-type="add"] {
- left: auto !important;
- right: 10px;
- }
-
- .layui-carousel:hover .layui-carousel-arrow[lay-type="add"],
- .layui-carousel[lay-arrow="always"] .layui-carousel-arrow[lay-type="add"] {
- right: 20px;
- }
-
- .layui-carousel[lay-arrow="always"] .layui-carousel-arrow {
- opacity: 1;
- left: 20px;
- }
-
- .layui-carousel[lay-arrow="none"] .layui-carousel-arrow {
- display: none;
- }
-
- .layui-carousel-arrow:hover,
- .layui-carousel-ind ul:hover {
- background-color: rgba(0, 0, 0, 0.35);
- }
-
- .layui-carousel:hover .layui-carousel-arrow {
- display: block\9;
- opacity: 1;
- left: 20px;
- }
-
- .layui-carousel-ind {
- position: relative;
- top: -35px;
- width: 100%;
- line-height: 0 !important;
- text-align: center;
- font-size: 0;
- }
-
- .layui-carousel[lay-indicator="outside"] {
- margin-bottom: 30px;
- }
-
- .layui-carousel[lay-indicator="outside"] .layui-carousel-ind {
- top: 10px;
- }
-
- .layui-carousel[lay-indicator="outside"] .layui-carousel-ind ul {
- background-color: rgba(0, 0, 0, 0.5);
- }
-
- .layui-carousel[lay-indicator="none"] .layui-carousel-ind {
- display: none;
- }
-
- .layui-carousel-ind ul {
- display: inline-block;
- padding: 5px;
- background-color: rgba(0, 0, 0, 0.2);
- border-radius: 10px;
- -webkit-transition-duration: 0.3s;
- transition-duration: 0.3s;
- }
-
- .layui-carousel-ind li {
- display: inline-block;
- width: 10px;
- height: 10px;
- margin: 0 3px;
- font-size: 14px;
- background-color: @global-neutral-color-3;
- background-color: rgba(255, 255, 255, 0.5);
- border-radius: 50%;
- cursor: pointer;
- -webkit-transition-duration: 0.3s;
- transition-duration: 0.3s;
- }
-
- .layui-carousel-ind li:hover {
- background-color: rgba(255, 255, 255, 0.7);
- }
-
- .layui-carousel-ind li.layui-this {
- background-color: #fff;
- }
-
- .layui-carousel > [carousel-item] > .layui-carousel-next,
- .layui-carousel > [carousel-item] > .layui-carousel-prev,
- .layui-carousel > [carousel-item] > .layui-this {
- display: block;
- }
-
- .layui-carousel > [carousel-item] > .layui-this {
- left: 0;
- }
-
- .layui-carousel > [carousel-item] > .layui-carousel-prev {
- left: -100%;
- }
-
- .layui-carousel > [carousel-item] > .layui-carousel-next {
- left: 100%;
- }
-
- .layui-carousel > [carousel-item] > .layui-carousel-next.layui-carousel-left,
- .layui-carousel > [carousel-item] > .layui-carousel-prev.layui-carousel-right {
- left: 0;
- }
-
- .layui-carousel > [carousel-item] > .layui-this.layui-carousel-left {
- left: -100%;
- }
-
- .layui-carousel > [carousel-item] > .layui-this.layui-carousel-right {
- left: 100%;
- }
-
- .layui-carousel[lay-anim="updown"] .layui-carousel-arrow {
- left: 50% !important;
- top: 20px;
- margin: 0 0 0 -18px;
- }
-
- .layui-carousel[lay-anim="updown"] > [carousel-item] > *,
- .layui-carousel[lay-anim="fade"] > [carousel-item] > * {
- left: 0 !important;
- }
-
- .layui-carousel[lay-anim="updown"] .layui-carousel-arrow[lay-type="add"] {
- top: auto !important;
- bottom: 20px;
- }
-
- .layui-carousel[lay-anim="updown"] .layui-carousel-ind {
- position: absolute;
- top: 50%;
- right: 20px;
- width: auto;
- height: auto;
- }
-
- .layui-carousel[lay-anim="updown"] .layui-carousel-ind ul {
- padding: 3px 5px;
- }
-
- .layui-carousel[lay-anim="updown"] .layui-carousel-ind li {
- display: block;
- margin: 6px 0;
- }
-
- .layui-carousel[lay-anim="updown"] > [carousel-item] > .layui-this {
- top: 0;
- }
-
- .layui-carousel[lay-anim="updown"] > [carousel-item] > .layui-carousel-prev {
- top: -100%;
- }
-
- .layui-carousel[lay-anim="updown"] > [carousel-item] > .layui-carousel-next {
- top: 100%;
- }
-
- .layui-carousel[lay-anim="updown"]
- > [carousel-item]
- > .layui-carousel-next.layui-carousel-left,
- .layui-carousel[lay-anim="updown"]
- > [carousel-item]
- > .layui-carousel-prev.layui-carousel-right {
- top: 0;
- }
-
- .layui-carousel[lay-anim="updown"]
- > [carousel-item]
- > .layui-this.layui-carousel-left {
- top: -100%;
- }
-
- .layui-carousel[lay-anim="updown"]
- > [carousel-item]
- > .layui-this.layui-carousel-right {
- top: 100%;
- }
-
- .layui-carousel[lay-anim="fade"] > [carousel-item] > .layui-carousel-next,
- .layui-carousel[lay-anim="fade"] > [carousel-item] > .layui-carousel-prev {
- opacity: 0;
- }
-
- .layui-carousel[lay-anim="fade"]
- > [carousel-item]
- > .layui-carousel-next.layui-carousel-left,
- .layui-carousel[lay-anim="fade"]
- > [carousel-item]
- > .layui-carousel-prev.layui-carousel-right {
- opacity: 1;
- }
-
- .layui-carousel[lay-anim="fade"]
- > [carousel-item]
- > .layui-this.layui-carousel-left,
- .layui-carousel[lay-anim="fade"]
- > [carousel-item]
- > .layui-this.layui-carousel-right {
- opacity: 0;
- }
-
\ No newline at end of file
+ position: relative;
+ left: 0;
+ top: 0;
+ background-color: #f8f8f8;
+}
+
+.layui-carousel > [carousel-item] {
+ position: relative;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
+}
+
+.layui-carousel > [carousel-item]:before {
+ position: absolute;
+ content: "\e63d";
+ left: 50%;
+ top: 50%;
+ width: 100px;
+ line-height: 20px;
+ margin: -10px 0 0 -50px;
+ text-align: center;
+ color: @global-neutral-color-8;
+ font-family: layui-icon !important;
+ font-size: 30px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.layui-carousel > [carousel-item] > * {
+ display: none;
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ background-color: #f8f8f8;
+ transition-duration: 0.3s;
+ -webkit-transition-duration: 0.3s;
+}
+
+.layui-carousel-updown > * {
+ -webkit-transition: 0.3s ease-in-out up;
+ transition: 0.3s ease-in-out up;
+}
+
+.layui-carousel-arrow {
+ display: none\9;
+ opacity: 0;
+ position: absolute;
+ left: 10px;
+ top: 50%;
+ margin-top: -18px;
+ width: 36px;
+ height: 36px;
+ line-height: 36px;
+ text-align: center;
+ font-size: 20px;
+ border: 0;
+ border-radius: 50%;
+ background-color: rgba(0, 0, 0, 0.2);
+ color: #fff;
+ -webkit-transition-duration: 0.3s;
+ transition-duration: 0.3s;
+ cursor: pointer;
+}
+
+.layui-carousel-arrow[lay-type="add"] {
+ left: auto !important;
+ right: 10px;
+}
+
+.layui-carousel:hover .layui-carousel-arrow[lay-type="add"],
+.layui-carousel[lay-arrow="always"] .layui-carousel-arrow[lay-type="add"] {
+ right: 20px;
+}
+
+.layui-carousel[lay-arrow="always"] .layui-carousel-arrow {
+ opacity: 1;
+ left: 20px;
+}
+
+.layui-carousel[lay-arrow="none"] .layui-carousel-arrow {
+ display: none;
+}
+
+.layui-carousel-arrow:hover,
+.layui-carousel-ind ul:hover {
+ background-color: rgba(0, 0, 0, 0.35);
+}
+
+.layui-carousel:hover .layui-carousel-arrow {
+ display: block\9;
+ opacity: 1;
+ left: 20px;
+}
+
+.layui-carousel-ind {
+ position: relative;
+ top: -35px;
+ width: 100%;
+ line-height: 0 !important;
+ text-align: center;
+ font-size: 0;
+}
+
+.layui-carousel[lay-indicator="outside"] {
+ margin-bottom: 30px;
+}
+
+.layui-carousel[lay-indicator="outside"] .layui-carousel-ind {
+ top: 10px;
+}
+
+.layui-carousel[lay-indicator="outside"] .layui-carousel-ind ul {
+ background-color: rgba(0, 0, 0, 0.5);
+}
+
+.layui-carousel[lay-indicator="none"] .layui-carousel-ind {
+ display: none;
+}
+
+.layui-carousel-ind ul {
+ display: inline-block;
+ padding: 5px;
+ background-color: rgba(0, 0, 0, 0.2);
+ border-radius: 10px;
+ -webkit-transition-duration: 0.3s;
+ transition-duration: 0.3s;
+}
+
+.layui-carousel-ind li {
+ display: inline-block;
+ width: 10px;
+ height: 10px;
+ margin: 0 3px;
+ font-size: 14px;
+ background-color: @global-neutral-color-3;
+ background-color: rgba(255, 255, 255, 0.5);
+ border-radius: 50%;
+ cursor: pointer;
+ -webkit-transition-duration: 0.3s;
+ transition-duration: 0.3s;
+}
+
+.layui-carousel-ind li:hover {
+ background-color: rgba(255, 255, 255, 0.7);
+}
+
+.layui-carousel-ind li.layui-this {
+ background-color: #fff;
+}
+
+.layui-carousel > [carousel-item] > .layui-carousel-next,
+.layui-carousel > [carousel-item] > .layui-carousel-prev,
+.layui-carousel > [carousel-item] > .layui-this {
+ display: block;
+}
+
+.layui-carousel > [carousel-item] > .layui-this {
+ left: 0;
+}
+
+.layui-carousel > [carousel-item] > .layui-carousel-prev {
+ left: -100%;
+}
+
+.layui-carousel > [carousel-item] > .layui-carousel-next {
+ left: 100%;
+}
+
+.layui-carousel > [carousel-item] > .layui-carousel-next.layui-carousel-left,
+.layui-carousel > [carousel-item] > .layui-carousel-prev.layui-carousel-right {
+ left: 0;
+}
+
+.layui-carousel > [carousel-item] > .layui-this.layui-carousel-left {
+ left: -100%;
+}
+
+.layui-carousel > [carousel-item] > .layui-this.layui-carousel-right {
+ left: 100%;
+}
+
+.layui-carousel[lay-anim="updown"] .layui-carousel-arrow {
+ left: 50% !important;
+ top: 20px;
+ margin: 0 0 0 -18px;
+}
+
+.layui-carousel[lay-anim="updown"] > [carousel-item] > *,
+.layui-carousel[lay-anim="fade"] > [carousel-item] > * {
+ left: 0 !important;
+}
+
+.layui-carousel[lay-anim="updown"] .layui-carousel-arrow[lay-type="add"] {
+ top: auto !important;
+ bottom: 20px;
+}
+
+.layui-carousel[lay-anim="updown"] .layui-carousel-ind {
+ position: absolute;
+ top: 50%;
+ right: 20px;
+ width: auto;
+ height: auto;
+}
+
+.layui-carousel[lay-anim="updown"] .layui-carousel-ind ul {
+ padding: 3px 5px;
+}
+
+.layui-carousel[lay-anim="updown"] .layui-carousel-ind li {
+ display: block;
+ margin: 6px 0;
+}
+
+.layui-carousel[lay-anim="updown"] > [carousel-item] > .layui-this {
+ top: 0;
+}
+
+.layui-carousel[lay-anim="updown"] > [carousel-item] > .layui-carousel-prev {
+ top: -100%;
+}
+
+.layui-carousel[lay-anim="updown"] > [carousel-item] > .layui-carousel-next {
+ top: 100%;
+}
+
+.layui-carousel[lay-anim="updown"]
+ > [carousel-item]
+ > .layui-carousel-next.layui-carousel-left,
+.layui-carousel[lay-anim="updown"]
+ > [carousel-item]
+ > .layui-carousel-prev.layui-carousel-right {
+ top: 0;
+}
+
+.layui-carousel[lay-anim="updown"]
+ > [carousel-item]
+ > .layui-this.layui-carousel-left {
+ top: -100%;
+}
+
+.layui-carousel[lay-anim="updown"]
+ > [carousel-item]
+ > .layui-this.layui-carousel-right {
+ top: 100%;
+}
+
+.layui-carousel[lay-anim="fade"] > [carousel-item] > .layui-carousel-next,
+.layui-carousel[lay-anim="fade"] > [carousel-item] > .layui-carousel-prev {
+ opacity: 0;
+}
+
+.layui-carousel[lay-anim="fade"]
+ > [carousel-item]
+ > .layui-carousel-next.layui-carousel-left,
+.layui-carousel[lay-anim="fade"]
+ > [carousel-item]
+ > .layui-carousel-prev.layui-carousel-right {
+ opacity: 1;
+}
+
+.layui-carousel[lay-anim="fade"]
+ > [carousel-item]
+ > .layui-this.layui-carousel-left,
+.layui-carousel[lay-anim="fade"]
+ > [carousel-item]
+ > .layui-this.layui-carousel-right {
+ opacity: 0;
+}
diff --git a/src/component/carousel/index.ts b/src/component/carousel/index.ts
index 5511c18f..389b5c17 100644
--- a/src/component/carousel/index.ts
+++ b/src/component/carousel/index.ts
@@ -5,4 +5,4 @@ Component.install = (app: App) => {
app.component(Component.name, Component);
};
-export default Component;
+export default Component;
\ No newline at end of file
diff --git a/src/component/carousel/index.vue b/src/component/carousel/index.vue
index a75352e3..ee80d0f5 100644
--- a/src/component/carousel/index.vue
+++ b/src/component/carousel/index.vue
@@ -6,7 +6,8 @@ export default {
diff --git a/src/component/tab/index.vue b/src/component/tab/index.vue
index 590ee0b4..de96e15a 100644
--- a/src/component/tab/index.vue
+++ b/src/component/tab/index.vue
@@ -29,6 +29,7 @@ export interface LayTabProps {
const slot = useSlots();
const slots = slot.default && slot.default();
const childrens: Ref = ref([]);
+const slotsChange = ref(true);
const setItemInstanceBySlot = function (nodeList: VNode[]) {
nodeList?.map((item) => {
@@ -53,7 +54,6 @@ const active = computed({
emit("update:modelValue", val);
},
});
-const slotsChange = ref(true);
const change = function (id: any) {
// 回调切换标签之前的回调钩子函数,只要不是return false, 则进行切换该tab