封装一个中间大两头小的轮播图(vue-awesome-swiper、vue2)

news2024/11/27 14:27:55

需求

先看效果图
vue-awesome-swiper

对vue来说,element-UI是有相应的轮播组件(走马灯)的,但相对简单的
在这里插入图片描述
如上面的两头大中间小轮播,element上文档这款很类似,但不适用,因为卡片之间底层移动和间距是依赖js实现的,当页面存在间距而且不同页面需要适配时,我从控制css样式层面很难实现。

所以有了这个组件的封装

提示:
本组件

1、封装中只使用了一些网络资源图片

2、提供了初始化默认是数据

3、使用插槽默认一些代码布局

属于拿来代码导入即可直接看到效果的

实现

vue-awesome-swiper安装

对vue-awesome-swiper来说,版本不同会出现很多问题(比如导入的css文件位置)
swiper和vue-awesome-swiper的版本一定要相对应

版本安装

npm i swiper@4.5.1 vue-awesome-swiper@3.1.3 --save
"swiper": "^4.5.1",
"vue-awesome-swiper": "^3.1.3",

代码

提供了网络图片的默认数据sceneCardList
提供了slot插槽供提供布局代码

组件封装代码

<template>
  <div class="main-conent main-conent-screen main-conent-bgFFF main-conent-borderradius">
    <div class="swiper">
      <swiper v-slot="{item}" :swiperlist="sceneCardList" @selectItem="selectItem">
        <div class="CasesCard-li" @click="selectItem(item)">
          <img :src="item.url" alt="">
          <div class="info">
            <img :src="item.img" alt="">
            <div class="CasesCard-li-name">{{ item.text }}</div>
            <div class="CasesCard-li-text">
              --{{ item.name }}
            </div>
          </div>
        </div>
      </swiper>
    </div>
    <div class="screen-header">
      <el-row>
        <el-col :span="8">
          <el-button v-hasPermi="['3']" type="primary" icon="el-icon-plus">新增</el-button>
          <el-dropdown class="margin-l10">
            <el-button type="primary" icon="el-icon-plus">
              更多操作<i class="el-icon-arrow-down el-icon--right" />
            </el-button>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item>批量删除</el-dropdown-item>
              <el-dropdown-item>批量审批</el-dropdown-item>
              <el-dropdown-item>批量编辑</el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
        </el-col>
        <el-col :span="16" class="text-right">
          <el-input
            v-model="search"
            class="margin-l10"
            style="width:200px;"
            placeholder="请输入搜索内容"
          >
            <i slot="suffix" class="el-input__icon el-icon-search cursor-pointer" />
          </el-input>
        </el-col>
      </el-row>
    </div>

    <screen-table
      class="screen-conent assets-grey-theme-table"
      table-class="custom-table"
      header-row-class-name="custom-table-header"
      :data="tableData"
    >
      <el-table-column
        fixed
        type="selection"
        width="55"
      />
      <el-table-column
        fixed
        prop="date"
        label="日期"
        width="150"
      />
      <el-table-column
        prop="name"
        label="姓名"
        min-width="120"
      />
      <el-table-column
        prop="province"
        label="省份"
        min-width="120"
      />
      <el-table-column
        prop="city"
        label="市区"
        min-width="120"
      />
      <el-table-column
        prop="address"
        label="地址"
        min-width="300"
      />
      <el-table-column
        prop="zip"
        label="邮编"
        min-width="120"
      />
      <el-table-column
        fixed="right"
        label="操作"
        width="100"
      >
        <template slot-scope="scope">
          <el-button type="text" @click="handleClick(scope.row)">查看</el-button>
          <el-dropdown class="margin-l5">
            <span class="cursor-pointer">
              <el-button type="text">更多<i class="el-icon-arrow-down el-icon--right" /></el-button>
            </span>
            <el-dropdown-menu slot="dropdown">
              <el-dropdown-item @click.native="tableEdit(scope.row)">编辑</el-dropdown-item>
              <el-dropdown-item @click.native="tableDel(scope.row)">删除</el-dropdown-item>
            </el-dropdown-menu>
          </el-dropdown>
        </template>
      </el-table-column>
    </screen-table>

    <el-link v-clipboard:copy="value" v-clipboard:success="clipboardSuccess" :underline="false" icon="el-icon-document-copy" style="float:right">复制</el-link>
    <pre>{{ value }}</pre>

    <div class="screen-footer text-right">
      <el-pagination
        background
        layout="sizes, prev, pager, next, total"
        :page-sizes="[10, 20, 50, 100]"
        :total="1000"
      />
    </div>
    <breadcrumb />
    <!-- <tui-editor ref="tuieditor" v-model="content" />
    <tui-editor-viewer v-model="content" /> -->
    <!-- 建议使用以下的编辑器 -->
    <!-- <mavon-editor
      v-model="content"
      :subfield="false"
      :toolbars-flag="true"
      :box-shadow="false"
      default-open="edit"
      preview-background="#FFFFFF"
    />
    <CKEditor v-model="editorData" /> -->
    <quillEditor />
    <tree-table
      :data="treeData"
      class="height-100"
      :column="treeTableColumn"
      node-key="id"
    >
      <template v-slot:default="{ node, treeData }">
        <el-button
          type="text"
          size="mini"
          @click.stop="add(node.level, treeData)"
        >
          新增下级
        </el-button>
        <el-button
          type="text"
          size="mini"
          @click.stop="add(node.level, treeData)"
        >
          修改
        </el-button>
        <el-button
          type="text"
          size="mini"
          @click.stop="del(treeData)"
        >
          删除
        </el-button>
      </template>
    </tree-table>
  </div>
</template>
<script>
import ScreenTable from '@/components/ScreenTable'
import Breadcrumb from '@/components/Breadcrumb'
import quillEditor from '@/components/quillEditor'
import TuiEditor from '@/components/TuiEditor'
import TuiEditorViewer from '@/components/TuiEditor/Viewer'
import MavonEditor from '@/components/MavonEditor'
import CKEditor from '@/components/CKEditor'
import TreeTable from '@/components/TreeTable'
import swiper from './swiper/index.vue'
import yiliao from '@/assets/images/cooperate/yiliao.png'
import juxing from '@/assets/images/cooperate/矩形(3).png'
export default {
  components: {
    ScreenTable,
    Breadcrumb,
    quillEditor,
    TreeTable,
    swiper
    // CKEditor,
    // TuiEditor,
    // TuiEditorViewer,
    // MavonEditor
  },
  data() {
    return {
      sceneCardList: [
        {
          name: '联想集团',
          text: '在国能云IoT物联网使能服务的基础上,帮助企业了解完整的设备全生命周期管理能力数据,提供设备物模型,简化物联网应用开发难度、缩短开发时间,降低物联网应用开…',
          img: yiliao,
          url: juxing
        },
        {
          name: '联想集团',
          text: '在国能云IoT物联网使能服务的基础上,帮助企业了解完整的设备全生命周期管理能力数据,提供设备物模型,简化物联网应用开发难度、缩短开发时间,降低物联网应用开…',
          go: '前往云市场',
          img: yiliao,
          url: juxing
        },
        {
          name: '联想集团',
          text: '在国能云IoT物联网使能服务的基础上,帮助企业了解完整的设备全生命周期管理能力数据,提供设备物模型,简化物联网应用开发难度、缩短开发时间,降低物联网应用开…',
          img: yiliao,
          url: juxing
        },
        {
          name: '联想集团',
          text: '在国能云IoT物联网使能服务的基础上,帮助企业了解完整的设备全生命周期管理能力数据,提供设备物模型,简化物联网应用开发难度、缩短开发时间,降低物联网应用开…',
          go: '前往云市场',
          img: yiliao,
          url: juxing
        },
        {
          name: '联想集团',
          text: '在国能云IoT物联网使能服务的基础上,帮助企业了解完整的设备全生命周期管理能力数据,提供设备物模型,简化物联网应用开发难度、缩短开发时间,降低物联网应用开…',
          go: '前往云市场',
          img: yiliao,
          url: juxing
        },
        {
          name: '联想集团',
          text: '在国能云IoT物联网使能服务的基础上,帮助企业了解完整的设备全生命周期管理能力数据,提供设备物模型,简化物联网应用开发难度、缩短开发时间,降低物联网应用开…',
          go: '前往官方文档',
          img: yiliao,
          url: juxing
        }
      ],
      content: '# This is Test.',
      contentHtml: '',
      search: '',
      value: '123test',
      editorData: '<p>Content of the editor.</p>',
      tableData: [
        {
          date: '2016-05-02',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1518 弄',
          zip: 200333
        },
        {
          date: '2016-05-04',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1517 弄',
          zip: 200333
        },
        {
          date: '2016-05-01',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1519 弄',
          zip: 200333
        },
        {
          date: '2016-05-03',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1516 弄',
          zip: 200333
        },
        {
          date: '2016-05-02',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1518 弄',
          zip: 200333
        },
        {
          date: '2016-05-04',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1517 弄',
          zip: 200333
        },
        {
          date: '2016-05-01',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1519 弄',
          zip: 200333
        },
        {
          date: '2016-05-03',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1516 弄',
          zip: 200333
        },
        {
          date: '2016-05-02',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1518 弄',
          zip: 200333
        },
        {
          date: '2016-05-04',
          name: '王小虎',
          province: '上海',
          city: '普陀区',
          address: '上海市普陀区金沙江路 1517 弄',
          zip: 200333
        }
      ],
      treeTableColumn: [
        {
          title: '分类列表',
          label: 'label1',
          minWidth: 300
        },
        {
          title: '简称',
          label: 'short',
          minWidth: 300
        }
      ],
      treeData: [
        {
          id: 1,
          label1: '一级 1',
          short: 'one 1',
          children: [{
            id: 4,
            label1: '二级 1-1',
            short: 'two 1-1',
            content: '111',
            children: []
          }]
        },
        {
          id: 2,
          label1: '一级 2',
          short: 'one 2',
          children: [{
            id: 5,
            label1: '二级 2-1',
            short: 'two 2-1'
          }, {
            id: 6,
            label1: '二级 2-2',
            short: 'two 2-3'
          }]
        },
        {
          id: 3,
          label1: '一级 3',
          short: 'one 3',
          children: [{
            id: 7,
            label1: '二级 3-1',
            short: 'tow 3-1'
          }, {
            id: 8,
            label1: '二级 3-2',
            short: 'tow 3-2'
          }]
        },
        {
          id: 20,
          label1: '一级 4',
          short: 'one 4',
          children: [{
            id: 21,
            label1: '二级 4-1',
            short: 'tow 4-1'
          }, {
            id: 22,
            label1: '二级 4-2',
            short: 'tow 4-2'
          }]
        },
        {
          id: 30,
          label1: '一级 5',
          short: 'one 5',
          children: [{
            id: 31,
            label1: '二级 5-1',
            short: 'tow 5-1'
          }, {
            id: 32,
            label1: '二级 5-2',
            short: 'tow 5-2'
          }]
        }
      ]
    }
  },
  created() {
    this.$EventBus.$on('changePrice', (oldPrice, newPrice) => {
      console.log(oldPrice, newPrice)
    })
    this.$EventBus.$emit('changePrice', 100, 200)
  },
  methods: {

    selectItem(item) {
      // 对选中的swiper项进行处理
      console.log('选中的swiper项', item)
    },
    add(level, data) {
      console.log(level, data)
      this.$message({
        message: '这里可以显示一个弹框表单',
        type: 'success'
      })
    },
    del(data) {
      console.log(data)
      this.$confirm('是否确认删除?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.$message({
          message: '删除成功',
          type: 'success'
        })
      }).catch(() => {})
    },
    getContent() {
      this.contentHtml = this.$refs.tuieditor.getHtml()
    },
    imgUpload(fileOrBlob, callback) {
      var formdata = new FormData()
      formdata.append('image', fileOrBlob)
      console.log(formdata, fileOrBlob)
      /*
        // ajax上传
        request({
            url: '/upload/img',
            method: 'post',
            data: formdata,
            headers: { 'Content-Type': 'multipart/form-data' }
        }).then(res => {
            const { data } = res;
            const { url, name } = data;
            callback(url, name);
        }).catch(err => {
            console.log(err);
        }); */
      callback('https://gitee.com/lqsong/public/raw/master/common/Alipay.png', '赞助码')
    },
    /** 高亮显示 */
    highlightedCode(code, key) {

    },
    /** 复制代码成功 */
    clipboardSuccess() {
      this.$modal.msgSuccess('复制成功')
    },
    handleClick(row) {
      console.log(row)
    },
    tableEdit(row) {
      console.log(row)
    },
    tableDel(row) {
      this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        console.log(row)
        this.$message({
          type: 'success',
          message: '删除成功!'
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        })
      })
    }
  }
}
</script>
// 默认的插槽布局
<style lang="scss" scoped>
.swiper{
  height: 350px;
  position: relative;
}
.CasesCard-li{
  width: 457px;
  height: 350px;
  background: linear-gradient(180deg, #DFE4F0 0%, #FFFFFF 17%, #FFFFFF 100%);
  box-shadow: 4px 7px 18px 0px rgba(0,0,0,0.1);
  border-radius: 4px;
  margin-right: 32px;
  &-text{
    margin-top: 20px;
    display: flex;
    align-items: center;
    font-size: 14px;
    font-family: PingFangSC-Regular, PingFang SC;
    font-weight: 400;
    color: #4E5969;
    text-shadow: 4px 8px 20px rgba(0,0,0,0.1);
    justify-content: end;
  }
  >img{
    width: 100%;
    height: 145px;
  }
  .info{
    height: 205px;
    background: linear-gradient(180deg, #DFE4F0 0%, #FFFFFF 17%, #FFFFFF 100%);
    box-shadow: 4px 7px 18px 0px rgba(0,0,0,0.1);
    border-radius: 4px;
    padding: 0 32px;
    font-size: 14px;
    font-family: PingFangSC-Regular, PingFang SC;
    font-weight: 400;
    color: #4E5969;
    line-height: 20px;
    text-shadow: 4px 8px 20px rgba(0,0,0,0.1);
    >img{
      height: 48px;
      box-shadow: 4px 8px 20px 0px rgba(0,0,0,0.1);
      border-radius: 4px;
      margin-bottom: 16px;
      margin-top: 8px;
    }
  }
}
</style>

使用

导入组件

import swiper from './swiper/index.vue'
components: {
    swiper
  },

直接使用

// 直接使用
<swiper />

直接使用修改option配置项

// 直接使用
<swiper :swiper-option="options"/>

传递数据

<swiper :swiperlist="sceneCardList"></swiper>
数据格式:{
     name: '联想集团',
     text: '在国能云IoT物联网使能服务的基础上',
     img: url,
     url: url  
}

传递数据并修改布局

<swiper v-slot="{item}" :swiperlist="sceneCardList">
   <div class="CasesCard-li">
     <img :src="item.url" alt="">
     <div class="info">
       <img :src="item.img" alt="">
       <div class="CasesCard-li-name">{{ item.text }}</div>
       <div class="CasesCard-li-text">
         --{{ item.name }}
       </div>
     </div>
   </div>
 </swiper>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1188313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Transformer从零开始代码实现 pytoch版】(二)Encoder编码器组件:mask+attention+feed forward+addnorm

Encoder组件 编码器部分&#xff1a; 由N个编码器层堆叠而成每个编码器层由两个子层连接结构组成第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接第二个子层连接结构包括一个前馈全连接子层和规范化层以及一个残差连接 &#xff08;1&#xff09;Mask…

Python 标准库 subprocess 模块详解

1. Subprocess模块介绍 1.1 基本功能 subprocess 模块&#xff0c;允许生成新的进程执行命令行指令&#xff0c;python程序&#xff0c;以及其它语言编写的应用程序, 如 java, c,rust 应用等。subprocess可连接多个进程的输入、输出、错误管道&#xff0c;并且获取它们的返回…

医院检验信息管理系统源码 医院LIS系统源码 云LIS源码 区域LIS源码

医院检验信息管理系统源码 医院LIS系统源码 云LIS源码 区域LIS源码 医院检验信息管理系统&#xff0c;利用计算机网络技术、数据存储技术、快速处理技术&#xff0c;对检验科进行全方位信息化管理&#xff0c;使检验科达到自动化运行&#xff0c;信息化管理和无纸化办公的目的…

山西电力市场日前价格预测【2023-11-10】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-10&#xff09;山西电力市场全天平均日前电价为480.16元/MWh。其中&#xff0c;最高日前电价为710.56元/MWh&#xff0c;预计出现在18: 00。最低日前电价为388.44元/MWh&#xff0c;预计…

double类型数相减有小数误差问题

相减有误差 BigDecimal消除误差

12.(vue3.x+vite)组件间通信方式之$attrs与$listeners

前端技术社区总目录(订阅之前请先查看该博客) 示例效果 在vue3中的$attrs的变化 $ listeners已被删除合并到$ attrs中。 $ attrs现在包括class和style属性。 也就是说在vue3中$ listeners不存在了。vue2中$listeners是单独存在的。 在vue3 $attrs包括class和style属性, vue…

程序员的护城河:构建数字世界的守护者

目录 前言1 持续学习的愿望和能力2 与他人沟通和合作的能力3 追求技术的深度和广度4 具备分享的精神结语 前言 在数字化时代&#xff0c;程序员是现代社会的护城河。他们的工作不仅是构建应用程序和系统&#xff0c;更是为保障系统安全、数据防护以及网络稳定发挥着至关重要的…

如何判断身边的朋友是否嫉妒你?

嫉妒 &#xff0c;源于你的优秀&#xff0c;破坏了他的自恋。 为什么嫉妒往往发生在亲戚、朋友、同学、同行、同乡、同胞…之间&#xff0c;因为你们曾活在同一套自恋评价标准下。 通常情况下&#xff0c;如果你没发迹前&#xff0c;一个对你评价以负面为主的人&#xff0c;在…

带你走进中国十大名校,全面了解学校历史和文化

一、资源描述 本套资源是很不错的&#xff0c;带你实地走进中国十大名校的校园&#xff0c;看看校园内的著名景点和建筑&#xff0c;同时讲解十大名校的历史和文化。这些高校不仅是中国十大名校&#xff0c;可能也是中国排名前十的学校&#xff0c;更是众多学子梦寐以求的&…

Docker Desktop 和 WSL2 位置迁移

迁移 WSL2 安装位置 WSL2 默认安装在 C 盘&#xff0c;我们可以通过以下步骤迁移安装位置 通过以下命令列出已安装的 Linux 发行版&#xff1a; wsl -l -v可以看到已安装了 Ubuntu-22.04&#xff0c;其运行状态为&#xff1a;Stopped 如果运行状态为 Running&#xff0c;需…

折幕变形制作-插件及软件

1、案例展示&#xff1a; 各种变形制作相关&#xff1a; 沉浸式视频变形制作制作

企业涉密文件怎么加密?企业重要文件加密方法

对于一个企业来说&#xff0c;涉密文件的重要性不言而喻&#xff0c;我们需要使用专业的方法来保护企业重要文件。那么&#xff0c;企业涉密文件该怎么加密呢&#xff1f;下面我们来一起了解一下。 本地文件加密 针对在电脑本地保存的文件&#xff0c;我们可以使用超级加密300…

开发知识点-Pygame

Pygame Pygame最小开发框架与最小游戏游戏开发入门单元开篇 Pygame简介安装游戏开发入门语言开发工具的选择 Pygame最小开发框架与最小游戏 游戏开发入门单元开篇 Pygame简介安装 游戏开发入门语言开发工具的选择

肩胛骨筋膜炎怎么治疗最有效

肩胛后背疼痛是平时工作、生活中常见的一类症状&#xff0c;尤其现在随着工作方式和生活习惯的改变&#xff0c;长期伏案工作以及低头看电脑已经成为常态&#xff0c;所以肩胛后背痛出现的频率还是比较高的。常见的原因主要包括&#xff1a;肩胛后背的筋膜炎&#xff0c;最容易…

高云Tang Nano 4K和Tang Nano 9K的网络资源汇总

高云FPGA Tang Nano 4KTang Nano 9K 手上有高云的Tang Nano 4K和Tang Nano 9K两块开发板&#xff0c;高云的资料非常多&#xff0c;除了他官方给的各种pdf资料外&#xff0c;还有很多网络资源&#xff0c;本帖稍汇总下。 Tang Nano 4K 官方的介绍文档&#xff1a;https://wiki…

开发知识点-人工智能-深度学习Tensorflow2.0

Tensorflow 常用的参数有&#xff1a;快捷配置 做得多环境 环境问题 一、 简单 概述二、Tensorflow2版本简介与心得三、深度学习框架安装 Tensorflow2版本安装方法四 、 TF 基础操作So tensor flow 矩阵 在 这个 大框架 流动 五 深度学习要解决的问题六 深度学习应用领域#1下载…

数字孪生智慧工厂3D无代码编辑工具提供强大、简单功能

相比传统的2D/2.5D&#xff0c;3d可视化场景脱颖而出&#xff0c;成为更多行业的首选&#xff0c;然而传统的3D可视化场景制作需要花费大量的人力财力及周期来创建复杂的3D模型和场景&#xff0c;对很多企业及个人来说是个挑战&#xff0c;3D可视化场景编辑器通过简单的拖拉拽&…

LLM(三)| GPT-4 Turbo:OpenAI开发者大会重磅发布

2023年11月7日&#xff0c;OpenAI开发者大会带来一些列功能更新以及更低的API价格&#xff1a; GPT-4升级了 GPT-4 Turbo&#xff0c;性能更强&#xff0c;价格更低&#xff0c;重磅支持128K上下文&#xff1b;新的Assistants API使开发人员更容易构建自己的辅助人工智能应用程…

古代的谋士为何成不了第一把手?

谋与断之间天差地别&#xff0c;未来机器AI 可以代替很多人的工作角色&#xff0c;但唯独无法取代的就是一把手。 谋略看的是客体思维 &#xff0c;剥离人本身的影响&#xff0c;依靠形式逻辑 和辩证手段提供各种客体层面上的可能性方案&#xff1b;决断靠的是主体思维&#x…

【Python基础】Python文件操作介绍

文件操作 1.文件的基本操作1.1 操作文件的套路1.2 操作文件的函数/方法1.3 read 方法—— 读取文件1.4文件指针&#xff08;知道&#xff09;--位置指针1.5 按行读取文件内容1.6 文件读写案例—— 复制文件 1.文件的基本操作 1.1 操作文件的套路 在 计算机 中要操作文件的套路…