vue 走马灯 纵向滚动

背景:

走马灯纵向滚动,使用element的走马灯组件可能会出现显示不全的情况。如下图:

解决效果:

布局自适应

核心代码:

html 复制代码
        <el-carousel
          style="width: 100%; height: 100%"
          :autoplay="true"
          :interval="5000"
          :direction="'vertical'"
          :motion-blur="true"
          :height="'42vh'"
        >
          <el-carousel-item
            v-for="(item, index) of state.shipList"
            :key="index"
          >
            <div class="contents">
              <div class="ship-img-box">
                <el-image
                  v-if="item.photo"
                  class="carousel-image"
                  :src="BASEUrl + '/file/' + item.photo"
                  :preview-src-list="[BASEUrl + '/file/' + item.photo]"
                  :initial-index="index"
                  :preview-teleported="true"
                  alt=""
                />
                <div class="umpty_box" v-else>暂无渡船照片</div>
              </div>
              <div class="ship-people-content">
                <div class="ship-name-status">
                  <p>
                    {{ item.cname || "--" }}
                  </p>
                  <p :style="{ color: item.color }">
                    {{ item.text }}
                  </p>
                </div>
                <div class="info-box">
                  <div class="row-box">
                    <p>
                      <span>船长/宽:</span>
                      <span
                        >{{ item.length || "--" }}m/{{
                          item.width || "--"
                        }}m</span
                      >
                    </p>
                    <p>
                      <span>总吨位:</span>
                      <span>{{ item.grossTonnage || "--" }}吨</span>
                    </p>
                  </div>
                  <div
                    class="row-box"
                    v-for="(aitem, aindex) of item.crewInfoList"
                    :key="aindex"
                  >
                    <p>
                      <span>船员:</span>
                      <span>{{ aitem.name || "--" }}</span>
                    </p>
                    <p>
                      <span>电话:</span>
                      <span>{{ aitem.photo || "--" }}</span>
                    </p>
                  </div>
                </div>
              </div>
              <div class="num-text-box">
                <p>准载客</p>
                <p>
                  {{ item.carryPassengersNum || "--" }}
                </p>
              </div>
            </div>
          </el-carousel-item>
        </el-carousel>

核心样式:

javascript 复制代码
.contents {
  width: 100%;
  height: 98%;
  // background-color: pink;
  display: flex;
}
javascript 复制代码
<style lang="scss" scoped>
:deep(.el-carousel__container) {
  height: 100% !important;
}
:deep(.el-carousel__item){
  box-sizing: border-box;
}
</style>

拖动窗口,字体、布局自适应,使用了vite.config.js的配置:

代码:

javascript 复制代码
css: {
            preprocessorOptions: {
                scss: {
                    additionalData: `@import '/src/assets/css/global.scss';`,
                },
            },
            postcss: {
                plugins: [
                    postcssPxToViewport8Plugin({
                        unitToConvert: 'px',
                        viewportWidth: file => {
                            let num = 1920;
                            if (file.indexOf('m_') !== -1) {
                                num = 375;
                            }
                            return num;
                        },
                        unitPrecision: 5, // 单位转换后保留的精度
                        propList: ['*'], // 能转化为vw的属性列表
                        viewportUnit: 'vw', // 希望使用的视口单位
                        fontViewportUnit: 'vw', // 字体使用的视口单位
                        selectorBlackList: [], // 需要忽略的CSS选择器,不会转为视口单位,使用原有的px等单位。
                        minPixelValue: 1, // 设置最小的转换数值,如果为1的话,只有大于1的值会被转换
                        mediaQuery: true, // 媒体查询里的单位是否需要转换单位
                        replace: true, //  是否直接更换属性值,而不添加备用属性
                        exclude: [/node_modules\/ant-design-vue/], // 忽略某些文件夹下的文件或特定文件,例如 'node_modules' 下的文件
                        include: [], // 如果设置了include,那将只有匹配到的文件才会被转换
                        landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件 @media (orientation: landscape)
                        landscapeUnit: 'vw', // 横屏时使用的单位
                        landscapeWidth: 1024, // 横屏时使用的视口宽度
                    }),
                ],
            },
        },
相关推荐
清岚_lxn4 小时前
原生SSE实现AI智能问答+Vue3前端打字机流效果
前端·javascript·人工智能·vue·ai问答
ZoeLandia5 小时前
Element UI 设置 el-table-column 宽度 width 为百分比无效
前端·ui·element-ui
橘子味的冰淇淋~5 小时前
解决 vite.config.ts 引入scss 预处理报错
前端·vue·scss
小小小小宇7 小时前
V8 引擎垃圾回收机制详解
前端
lauo7 小时前
智体知识库:ai-docs对分布式智体编程语言Poplang和javascript的语法的比较(知识库问答)
开发语言·前端·javascript·分布式·机器人·开源
拉不动的猪8 小时前
设计模式之------单例模式
前端·javascript·面试
一袋米扛几楼988 小时前
【React框架】什么是 Vite?如何使用vite自动生成react的目录?
前端·react.js·前端框架
Alt.98 小时前
SpringMVC基础二(RestFul、接收数据、视图跳转)
java·开发语言·前端·mvc
进取星辰8 小时前
1、从零搭建魔法工坊:React 19 新手村生存指南
前端·react.js·前端框架
前端开发张小七9 小时前
每日一练:2.leetcode回文数
前端·python