vue 移动端开发实现点击复制的功能

前言

使用开源项目 clipboard.js, 官网:https://clipboardjs.com/

这个插件复制的对象必须是input 或者 textarea 里面的值。所以说你要是想复制p标签或者其他文本
必须先设置一个input或者textarea作为中间过渡。html中写一个textarea标签,样式设置: opacity:0;
z-index=-1;这样就可使隐藏这个没用的容器。

使用步骤

1.下包

1.下包:可以通过npm安装,npm install clipboard.js --save-dev

2.导包

代码如下(示例):

import Clipboard from 'clipboard'

3.代码

html代码:

 <div class="code-box">
      <p class="code-num" id="codeNum">AE86123456</p>
      <textarea id="input"></textarea>
      <p class="code-btn copy" @click="copy" id="codeBtn" data-clipboard-target="#input">复制邀请码</p>
    </div>

js代码:

 copy () {
      var clipboard = new Clipboard('.btn')
      // let e = document.getElementById('codeNum').innerText
      let t = document.getElementById('input')
      t.value = this.code
      clipboard.on('success', e => {
        console.log('复制成功', e)
        this.$toast.success({
          message: '复制成功'
        })
        // 释放内存
        clipboard.destroy()
      })
      clipboard.on('error', e => {
        // 不支持复制
        this.$toast.fail({
          message: '手机权限不支持复制功能'
        })
        console.log('该浏览器不支持自动复制')
        // 释放内存
        clipboard.destroy()
      })
    }

完整代码:复制即可用

<template>
  <div class="myTicket">
    <div class="content">
      <div class="title">
        <span>任务名称</span>
        <span>任务状态</span>
        <span>奖品</span>
      </div>
      <div class="list">
        <van-row class="list-item">
          <van-col span="8">
            报名课程
          </van-col>
          <van-col span="8">已完成</van-col>
          <van-col span="8"
            >5元券
            <van-button
              class="btn"
              :color="colorObj[0]"
              type="info"
              round
              size="mini"
              >{{ isGetObj[0] }}</van-button
            >
          </van-col>
        </van-row>
        <van-row class="list-item" v-for="(item, index) in 9" :key="index">
          <van-col span="8">
            第一课
          </van-col>
          <van-col span="8">已完成</van-col>
          <van-col span="8"
            >5元券
            <van-button
              class="btn"
              :color="colorObj[1]"
              type="info"
              round
              size="mini"
              @click="getCode"
              >{{ isGetObj[1] }}</van-button
            >
          </van-col>
        </van-row>
      </div>
    </div>
    <!-- 券码弹窗 -->
    <van-popup
      round
      v-model="showCode"
      closeable
      v-if="showCode"
      :visible.sync="showCode"
    >
      <div class="ticket">
        <div class="title" id="codeNum">券码:{{ code }}</div>
        <textarea id="input">123</textarea>
        <div
          @click="copy"
          class="btn"
          id="codeBtn"
          :style="{ 'background-color': color }"
          data-clipboard-target="#input"
        >
          {{ txt }}
        </div>
        <div class="tips">温馨提示: 进入小程序输入券码使用</div>
      </div>
    </van-popup>
  </div>
</template>

<script src="@/js/clipboard.min.js"></script>
<script>
import Clipboard from 'clipboard'
export default {
  watch: {
    //对弹窗进行初始化
    showCode () {
      this.txt = '复制'
      this.color = '#269dfc'
    }
  },
  data () {
    return {
      showCode: false,
      code: '341fsadfhjkhsj',
      txt: '复制',
      color: '#269dfc',
      colorObj: { 0: '#aedcff', 1: '#269dfc' },
      isGetObj: { 0: '已领取', 1: '未领取', 2: '未完成' }
    }
  },
  created() {
    window.console.log(123);
  },
  methods: {
    getCode () {
      this.showCode = true
    },
    copy () {
      var clipboard = new Clipboard('.btn')
      let t = document.getElementById('input')
      t.value = this.code
      clipboard.on('success', e => {
        console.log('复制成功', e)
        this.$toast.success({
          message: '复制成功'
        })
        this.txt = '已复制'
        this.color = '#707171'
        // 释放内存
        clipboard.destroy()
      })
      clipboard.on('error', e => {
        // 不支持复制
        this.$toast.fail({
          message: '手机权限不支持复制功能'
        })
        console.log('该浏览器不支持自动复制')
        // 释放内存
        clipboard.destroy()
      })
    }
  }
}
</script>



<style lang="less" scoped>
.myTicket {
  textarea {
    opacity: 0;
    z-index: -1;
    width: 0;
    height: 0;
  }
  height: 667px;
  background-image: url('../assets/我的券.png');
  background-size: contain;
  overflow: hidden;
  .content {
    width: 340px;
    height: 416px;
    margin: 222px auto;
    border-radius: 12px;
    background-color: #fff;
    padding: 30px 0;
    overflow-y: auto;
    .title {
      display: flex;
      justify-content: center;
      font-weight: 700;
      font-size: 16px;
      color: #3d3d3d;
      text-align: center;
      margin-bottom: 32px;
      span {
        flex: 1;
      }
    }
    .list {
      text-align: center;
      font-size: 14px;
      color: #6a6a6a;
      .btn {
        margin-top: 4px;
        padding: 0px 13px;
        font-size: 12px;
      }
      .list-item {
        margin-top: 20px;
      }
    }
  }
  .ticket {
    height: 180px;
    width: 340px;
    background-color: #fff;
    text-align: center;
    .title {
      font-size: 20px;
      color: #696969;
      margin-top: 40px;
    }
    .btn {
      width: 100px;
      height: 40px;
      line-height: 40px;
      margin: auto;
      font-size: 20px;
      color: #fff;
      border-radius: 5px;
    }
    .tips {
      font-size: 11px;
      color: #696969;
      margin-top: 31px;
    }
  }
}
</style>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# 项目特点 - 前台参考"Hexo"的"Butterfly"设计,美观简洁,响应式体验好。 - 后台参考"element-admin"设计,侧边栏,历史标签,面包屑自动生成。 - 采用Markdown编辑器,写法简单。 - 评论支持表情、GIF动图输入回复等,样式参考Valine。 - 前后分离部署,适应当前潮流。 - 接入第三方登录,减少注册成本。 - 留言采用弹幕墙,更加炫酷。 - 支持代码高亮和复制,图片预览,深色模式等功能,提升用户体验。 - 搜索文章支持高亮分词,响应速度快。 - 新增文章目录、推荐文章等功能,优化用户体验。 - 新增在线聊天室,支持撤回、语音输入、统计未读数量等功能。 - 新增aop注解实现操作日志功能。 - 支持动态权限修改,采用RBAC模型,前菜单和后台权限实时更新。 - 后台管理支持修改背景图片,博客配置等信息,操作简单,支持上传相册。 - 代码支持多种搜索模式(Elasticsearch或MYSQL),支持多种上传模式(OSS或本地),可支持配置。Elasticsearch占内存较高,如果服务器配置太低,不建议使用。 - 新增网站导航功能,页面优雅美观。可自行添加自己常用的网站进行分类和排序。 - 新增聊天管理功能,方便清理垃圾聊天内容。 - 新增登录日志功能,随时查看用户的登录信息。 - 前台页面重新布局重构,页面布局更加简洁,首页加载速度更快。 - 前台首页文章列表顶部新增滚动消息,超级炫酷。 - 新增了监控用户是否授权的功能、增加了用户的体验性。 - 增加图片删除后也将该路径的图片删除的功能、大大提高了文件存储的利用率。 - 将接口进行**axios**二次封装、更利于接口的请求和响应。 - 新增本博客配套的**微信小程序**,可随时用手机浏览文章。并且接入微信登录,减少注册成本。 - **微信小程序**新增每日新闻热搜功能、可随时查看热搜。 - 新增本博客配套的**App**,同时接入qq、微博登录,使用更加方便。 - 代码遵循阿里巴巴开发规范,利于开发者学习。 ## 技术介绍 **前:** vue + vuex + vue-router + axios + vuetify + element + echarts + uniapp + uview + Html + Css + JavaScript **后:** SpringBoot + nginx + docker + SpringSecurity + Swagger2 + MyBatisPlus + Mysql + Redis + elasticsearch + RabbitMQ + MaxWell + Websocket **其他:** 接入QQ,微博、微信第三方登录,接入腾讯云人机验证、websocket ## 运行环境 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
MySQL 是一款广受欢迎的开源关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现隶属于美国甲骨文公司(Oracle)。自1998年首次发布以来,MySQL以其卓越的性能、可靠性和可扩展性,成为全球范围内Web应用程序、企业级解决方案以及其他各种数据处理场景的首选数据库平台之一。 以下是对MySQL数据库的详细介绍: 核心特性与优势 开源与跨平台 MySQL遵循GPL开源协议,这意味着任何人都可以免费下载、使用和修改其源代码。这种开放性促进了广泛的社区支持和第三方插件、工具的发展。此外,MySQL支持多种操作系统,包括Windows、Linux、macOS、Solaris等,确保了其在不同环境下的兼容性和部署灵活性。 关系型模型与SQL支持 MySQL基于关系型数据库模型,数据以表格形式组织,并通过预定义的键(如主键、外键)在表之间建立关联。它完全支持结构化查询语言(SQL),允许用户进行数据查询、插入、更新、删除、创建和管理数据库结构等操作。SQL标准的广泛支持使得MySQL易于学习,且与其他关系型数据库系统有良好的互操作性。 存储引擎 MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY等,每种引擎都有特定的优势和适用场景。例如,InnoDB提供事务安全、行级锁定和外键约束,适合处理高并发事务性的应用;MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度定制化的存储解决方案。 性能与可扩展性 MySQL通过高效的缓存机制、查询优化器以及对硬件资源的有效利用,保证了在高负载情况下的稳定性和快速响应。它支持水平扩展(如通过分片、复制等技术)和垂直扩展(如增加硬件资源),以应对大规模数据存储和高并发访问的需求。 安全性与管理工具 MySQL提供了一系列安全措施,如用户账户管理、访问权限控制、SSL/TLS加密连接、审计日志等功能,确保数据的安全性和合规性。同时,MySQL附带了一系列管理工具,如MySQL Server、MySQL Workbench、MySQL Shell等,便于用户进行数据库配置、监控、备份、恢复、迁移等工作。 社区与生态系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值