直接在html中引入Vue.js的cdn来实现一个简单的上传图片组件

这篇具有很好参考价值的文章主要介绍了直接在html中引入Vue.js的cdn来实现一个简单的上传图片组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

摘要

当使用 Vue.js 的 CDN 来实现一个简单的上传图片组件时,你可以利用 Vue 的数据绑定和事件处理能力,结合 HTML 和 CSS,轻松地创建一个交互式的图片上传界面。以下是一个示例:

代码结构

直接在html中引入Vue.js的cdn来实现一个简单的上传图片组件,javassript,html,vue.js,前端

index.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Vue上传图片</title>
        <script src="vue.min.js"></script>
        <script src="axios.min.js"></script>
        <style>
            body {
                font-family: Arial, sans-serif;
                margin: 0;
                padding: 0;
                background: #f1f1f1;
            }
            
            .container {
                width: 100%;
                margin: 50px auto 0;
            }
            
            .container .upload-pannel {
                width: 500px;
                background: #fff;
                border-radius: 10px;
                margin: 20px auto 0;
                overflow: hidden;
            }
            .container .upload-pannel .pannel-title {
                width: 90%;
                margin: 20px auto;
                font-size: 15px;
                color: #333;
                font-weight: bold;
                display: block;
            }
            .container .upload-pannel .file-select{
                width: 90%;
                height: 250px;
                border: 2px dashed rgb(59,94,225);
                background: rgba(59,94,225,0.05);
                margin: 20px auto;
                display: block;
                border-radius: 10px;
                position: relative;
            }
            .container .upload-pannel input[type="file"]{
                width: 100%;
                height: 100%;
                opacity: 0;
                position: absolute;
                left: 0;
                top: 0;
            }
            .container .upload-pannel .upload-icon{
                width: 40px;
                height: 35px;
                display: block;
                margin: 0 auto;
                line-height: 250px;
            }
            .container .upload-pannel .upload-icon img{
                width: 40px;
                height: 35px;
            }
            .container .upload-pannel .file-select .upload-text{
                text-align: center;
                display: block;
                font-size: 14px;
                color: #999;
                line-height: 230px;
            }
            .container .upload-pannel .upload-progress{
                width: 90%;
                height: 60px;
                background: #f1f1f1;
                margin: 20px auto;
                border-radius: 10px;
                overflow: hidden;
            }
            .container .upload-pannel .upload-progress .progress-bar-container {
                position: relative;
                width: 90%;
                height: 10px;
                margin: 25px auto;
                background: #f1f1f1;
                border-radius: 10px;
                overflow: hidden;
            }
            
            .container .upload-pannel .upload-progress .progress-bar {
                height: 100%;
                background: rgb(59,94,225);
                border-radius: 10px;
                transition: width 0.3s ease-in-out;
            }
            
            .container .upload-pannel .upload-progress .progress-text {
                position: absolute;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
                font-size: 12px;
                color: #fff;
            }
            
            .container .upload-pannel .imgPreview{
                width: 90%;
                margin: 20px auto;
                display: block;
            }
        
        </style>
    </head>
    <body>
        <div id="app"></div>
        <script>
            new Vue({
                el: '#app',
                data() {
                return {
                    imgUrl: '',
                    uploadProgress: 0,
                    uploadProgressbg: false
                };
              },
              methods: {
                async handleImageUpload(event) {
                    const file = event.target.files[0];
                    if (file) {
                        
                        // 上传图片
                        this.uploadProgressbg = true;
                        const formData = new FormData();
                        formData.append('image', file);
                        
                        try {
                            const response = await axios.post('upload.php', formData, {
                            onUploadProgress: progressEvent => {
                                
                                // 改变进度条
                                this.uploadProgress = Math.round((progressEvent.loaded / progressEvent.total) * 100);
                            },
                        });
                        
                        const imageUrl = response.data.url;
                        if (imageUrl) {
                            
                            // 上传成功
                            this.imgUrl = imageUrl;
                        }
                        
                        } catch (error) {
                            
                            // 上传失败
                            console.error('Error uploading image:', error);
                        } finally {
                        
                        // 隐藏进度条
                        setTimeout(() => {
                            this.uploadProgress = 0;
                            this.uploadProgressbg = false;
                        }, 1500);
                    }
                  }
                },
            },
            template: `
                <div class="container">
                        <div class="upload-pannel">
                            <span class="pannel-title">Vue.js 图片上传</span>
                            <span class="file-select">
                                <input type="file" @change="handleImageUpload">
                                <span class="upload-icon">
                                    <img src="upload.png" />
                                </span>
                                <span class="upload-text">仅支持上传jpg、png、gif格式的图片</span>
                            </span>
                            <div class="upload-progress" v-if="uploadProgressbg == true">
                                <div class="progress-bar-container" :class="{ active: uploadProgressbg }">
                                    <div class="progress-bar" :style="{ width: uploadProgress + '%' }"></div>
                                <span class="progress-text" v-if="uploadProgressbg">{{ uploadProgress }}%</span>
                            </div>
                        </div>
                        <img v-if="imgUrl" :src="imgUrl" class="imgPreview">
                    </div>
                </div>`,
            });
        </script>
    </body>
</html>

动图演示

直接在html中引入Vue.js的cdn来实现一个简单的上传图片组件,javassript,html,vue.js,前端

作者

TANKING

源码下载

https://afdian.net/item/ffa3292a337c11ee9a8c5254001e7c00文章来源地址https://www.toymoban.com/news/detail-640469.html

到了这里,关于直接在html中引入Vue.js的cdn来实现一个简单的上传图片组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • vue3 实现简单计数器示例——一个html文件展示vue3的效果

    vue3 实现简单计数器示例——一个html文件展示vue3的效果

    目的 :作为一个新手开发,我想使用 Vue 3 将代码封装在 HTML 文件中时,进行界面打开展示。 学了一个简单计数器界面展示,代码如下: 在 上述HTML 文件里,包含了文件头标题 title , 接着定义了一个内容 div id=\\\"app\\\" 而后定义了一个内容,包含标题和数字,以及两个按钮的 templa

    2024年01月18日
    浏览(11)
  • vue-codemirror实现一个前端代码在线编辑器,可处理 HTML,VUE,JS,CSS代码在线编辑

    vue-codemirror实现一个前端代码在线编辑器,可处理 HTML,VUE,JS,CSS代码在线编辑

    先找个目录创建一个vue项目 例如 我们想要项目叫 editor 在终端执行 2和3其实都可以 但个人建议 最近还是2会更稳定一些 在终端执行 引入依赖包 然后在项目src目录下创建 utils 文件夹 里面创建一个setting.js 参考代码如下 然后 这边 调用组件的代码 因为项目也刚创 我直接写 s

    2024年02月15日
    浏览(16)
  • 用mysql+实现客户端界面代码【(css+html+js)或者vue】做一个酒店管理系统

    用mysql+实现客户端界面代码【(css+html+js)或者vue】做一个酒店管理系统

    鱼弦:CSDN内容合伙人、CSDN新星导师、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen)          设计内容: 两种身份的用户 1)普通客户:自己个人信息的管理、预定房间功能、收银结账功 能(押金,退房,账单处理): 2)管理

    2024年02月08日
    浏览(10)
  • vue项目中使用CDN引入

    vue项目中使用CDN引入

    CDN(内容分发网络)指请求资源的方式,即通过script头去请求对应的脚本资源的一种方式,项目里配置之后不需要通过npm包管理工具去下载配置的包。 目的:将引用的外部js、css文件剥离开来,不编译到vendor.js中,而是用资源的形式引用,这样浏览器可以使用多个线程异步将

    2024年02月11日
    浏览(11)
  • 用HTML+CSS+JS做一个简单的个人网页

    用HTML+CSS+JS做一个简单的个人网页

    暑假在家闲的没事,写了一个简单的小网页,从网上找了些图片和视频拼起来的,由于经验不足的关系,没有将想添加的东西放进去。 先来看看整个网页效果的视频吧 效果的图片如下(最右边空出来的其实是滑动条,截长屏自动没掉了) 首页 自我介绍  我的家乡  大学生涯

    2024年02月09日
    浏览(8)
  • 一步步带你实现一个简单的express服务器,能让vue通过axios请求将图片上传到阿里云OSS

    一步步带你实现一个简单的express服务器,能让vue通过axios请求将图片上传到阿里云OSS

    上篇文章提到了如何用mock.js来模拟接口,方便在后端没有写好接口的时候也能顺利开发,本来计划这篇文章是讲一下用轮播图组件swiper来展示一下模拟接收到的数据和图片,但项目计划发生了变化,这个就推到后面再说。 mock模拟接口虽然很好用,但是在项目开发的时候还是

    2024年02月04日
    浏览(13)
  • 记录--Vue使用CDN引入,响应式失效?

    记录--Vue使用CDN引入,响应式失效?

    最近心血来潮,想要在本地开发时,也用CDN的方式引入 Vue,想着既然通过CDN引入了,那么在项目中就没必要再 import Vue,然后把项目中引入 Vue 的地方都删掉,结果改完后,界面看似正常运行,但数据变更后,界面没有重新渲染。经过一番折腾,终于定位到问题。 vue版本:

    2024年02月05日
    浏览(11)
  • html/javascript实现简单的上传

    html/javascript实现简单的上传

    一、 上传用到的按钮类型是type = file 二、 为了美化上传按钮,我们通常会自定义按钮,将默认的上传隐藏掉。 fileInputs.click() 触发上传按钮点击 三、 new FileReader() 读取文件内容方法: readAsText() 读取文本文件,(可以使用Txt打开的文件) readAsBinaryString(): 读取任意类型的文件

    2023年04月17日
    浏览(6)
  • ❤️创意网页:打造简洁美观的网页轮播图(HTML简单实现轮播图)操作简单可以直接使用

    ❤️创意网页:打造简洁美观的网页轮播图(HTML简单实现轮播图)操作简单可以直接使用

    ✨ 博主: 命运之光 🌸 专栏: Python星辰秘典 🐳 专栏: web开发(简单好用又好看) ❤️ 专栏: Java经典程序设计 ☀️ 博主的其他文章: 点击进入博主的主页 前言: 欢迎踏入我的Web项目专栏,一段神奇而令人陶醉的数字世界! 🌌 在这里,我将带您穿越时空,揭开属于

    2024年02月17日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包