vue3使用viewer

news2025/1/23 6:13:38

介绍

v-viewer是一款基于viewer.js的强大的插件,不但支持vue3版本,还支持vue2、JavaScript、jquery,有以下特点:

  • 支持移动设备触摸事件
  • 支持响应式
  • 支持放大/缩小
  • 支持旋转(类似微博的图片旋转)
  • 支持水平/垂直翻转
  • 支持图片移动
  • 支持键盘
  • 支持全屏幻灯片模式(可做屏保)
  • 支持缩略图
  • 支持标题显示
  • 支持多种自定义事件

官网

官方网站
网站里介绍了三种用法,基本用法写的很详细了,这边就不再赘述,主要讲讲我使用这个插件的心路历程

需求

接到任务要求写一个图片查看标注系统,主要功能就是能查看图片、缩放,并对图片进行添加、删除标签的操作,并且明确不要用element的图片查看器,说是不好用……随手一百度就能找到这款viewer.js,经过一番探索,发现居然还有支持vue2、支持vue3的版本,开心!就决定用你啦!(还是开心的太早了……)

系统功能

系统包含一下功能:

  • 切换图片要获取到当前展示的哪一张图片
  • 点击图片缩略图可以重新排序并展示当前图片
  • 能给当前图片添加标签
  • 切换图片时获取当前图片的标签并展示标签

构造页面

在这里插入图片描述
页面形式确定后,首先想到是用API形式使用,因为可以随时随地想用就用,但就发现问题了,那就是inline模式下,查看大图的窗口没有办法关闭,会一直罩着,于是就放弃API了,然后就不知道为啥,经过尝试之后选择directive,以指令形式使用,其实组件和指令的都是大同小异,大家看着来就行。

改善页面

inline模式下,查看大图会一直无法关闭,怎么办呢?
改下页面布局,上面部分是图片的缩略图
预想的是点击图片下方主页面部分会切换图片的展示,
在这里插入图片描述
HTML部分代码如下

<div class="left">
  <div class="imgs" v-viewer.rebuild="options" >
    <template >
      <div v-for="src in showimages" :key="src.name">
        <img :src="src.url" class="img" >
      </div>
    </template>
  </div>
</div>

官方例子中,<template>中是没有<div>标签的,因为<template>标签上加key会报错,所以就再加了一层<div>包裹,也就是这个<div>,导致我走了不少弯路,为什么呢?在我们往绑定的showimages里面添加、删除元素时,整个页面看起来没有变化……也就是这个变动对viewer来说没有生效。

解决办法

经过研究,在viewer.js中,有一个判断image数组是否发生变化的函数imageDiff,在这个函数中,判断是否发生变化的条件是,获取指令元素的子元素中的<img>标签,而我用<div>包裹住了<img>会导致找到的<img>个数为0,所以导致无法更新image数组。所以解决的办法就是直接写<img>元素或者template下不要写<div>直接写<img>
immageDiff函数
就这个问题,看了一早上才看出来问题…呜呜呜我是菜鸡前端。解决这个问题之后,只需要改变数组顺序,对数组进行操作就可以实现切换展示图片。

切换图片的回调函数

当用户点击viewer切换图片时,我希望最上面的图片展示也能切换到当前展示的这一张,对viewer来说,有提供几个回调函数,其中就有view和viewed,所以我们只需要在options中定义好view函数,就可以获取到当前展示的数据的下标,或者e.detail.image对象下有srccurrentSrc字段分别记录了图片文件名和图片路径,可以根据这个高亮显示当前选中的图片。
其实是有更好的方法,就是viewer自带view(index)方法可以指定查看图片的下标,但是这个我调用了没有生效,所以暂时用 平替方法代替,就是修改viewer展示数组顺序,这样会销毁重绘viewer,使用起来体验是没什么区别的。

选中的图片高亮显示

选中图片的高亮显示只需要动态获取当前选中图片的key或者id,动态添加css就可以了。
在viewer中,有一个图片切换完成的回调函数viewed,还有切换图片之前的回调函数view,可以根据需要在option中设置。当用户点击上一张或下一张的时候,回调函数的入参会有e.detail.index,这个是当前图片在数组中的下标,可以根据下标获取到当前图片的信息。

其他整理

这部分大都来自于viewer.js官方文档,v-viewer是基于viewer.js

Options

用法:

Viewer.setDefaults(options)
options = {
	inline :true,
	fullsreen: false
}

inline

  • Type: Boolean
  • Default : false
    是否启用inline模式—inline模式就是在区域内展示,不是全屏幕覆盖

backdrop

  • Type: Boolean or String
  • Default : true

启用modal背景,为单击时不会关闭模态的背景指定静态

button

  • Type: Boolean
  • Default : true

是否显示右上角关闭按钮

navbar

是否显示缩略图导航

  • Type: Boolean or Number
  • Default : true
  • Options :
    0 or false: 隐藏缩略图导航
    1 or true: 显示缩略图导航
    2: 仅当屏幕宽度大于768像素时显示导航栏
    3: 仅当屏幕宽度大于992像素时显示导航栏
    4: 仅当屏幕宽度大于1200像素时显示导航栏

title

指定标题的可见性和内容

  • Type: Boolean or Number or Function or Array
  • Default: true
  • Option:
    0 or false: 不显示标题
    1 or true or Function or Array:显示标题
    2: 仅当屏幕宽度大于768像素时显示标题
    3: 仅当屏幕宽度大于992像素时显示标题
    4: 仅当屏幕宽度大于1200像素时显示标题
    Function: 自定义标题内容
    [Number, Function]: Number指示可见性,Function自定义标题内容

toolbar

指定工具栏及其按钮的可见性和布局。

  • Type: Boolean or Number or Object
  • Default: true
  • Options:
    0 or false: 隐藏工具栏.
    1 or true: 显示工具栏.
    2: 仅当屏幕宽度大于768像素时显示工具栏
    3: 仅当屏幕宽度大于992像素时显示工具栏
    4: 仅当屏幕宽度大于1200像素时显示工具栏
    { key: Boolean | Number }: 显示或隐藏工具栏.
    { key: String }: 自定义工具栏大小(size).
    { key: Function }: 自定义工具栏按钮的单击处理函数.
    { key: { show: Boolean | Number, size: String, click: Function }: 自定义按钮的每个属性.
    Available built-in keys(key可选项): “zoomIn”, “zoomOut”, “oneToOne”, “reset”, “prev”, “play”, “next”, “rotateLeft”, “rotateRight”, “flipHorizontal”, “flipVertical”.
    Available built-in sizes(size可选项): “small”, “medium” (default) and “large”.

className

要添加到viewer根元素的自定义类名。

  • Type: String
  • Default: ''

container

Document.querySelector的元素或有效选择器,用于将viewer置于modal模式的容器。只在inline:false时有效

  • Type: Element or String
  • Default: 'body'

没用过,不知道具体能填哪些字段

filter

指定筛选图片的函数,会遍历每张图片,return true的图片展示,return false的图片隐藏,所以function应有返回值

  • Type: Function
  • Default: null

注意,默认情况下,没有src属性集的图像将被忽略

fullscreen

自动播放时是否全屏

  • Type: Boolean or FullscreenOptions
  • Default: true

inheritedAttributes

定义要从原始图像继承的额外属性。

  • Type: Array
  • Default: ['crossOrigin', 'decoding', 'isMap', 'loading', 'referrerPolicy', 'sizes', 'srcset', 'useMap']

注意,基本属性src和alt将始终继承自原始图像。

initialCoverage

定义查看图像的初始覆盖范围。它必须是介于0(0%)和1(100%)之间的正数。

  • Type: Number
  • Default: 0.9

initialViewIndex

定义要查看的图像的初始索引。指定开始查看图像的下标

  • Type: Number
  • Default: 0

也用作视图方法的默认参数值。

inline

启用内联模式

  • Type: Boolean
  • Default: false

interval

播放时自动循环图像之间的间隔时间。单位:hms

  • Type: Number
  • Default: 5000

keyboard

是否允许用键盘操作(操作放大缩小、上一张下一张的功能)

  • Type: Boolean
  • Default: true
    在这里插入图片描述

focus

Focus the active item in the navbar when initialized.

  • Type: Boolean
  • Default: true

需要将keyboard设置为true

loading

加载图像时是否显示加载微调器。

  • Type: Boolean
  • Default: true

loop

是否启用循环查看(查看到最后一张,再点下一张跳转到第一张)

  • Type: Boolean
  • Default: true

minWidth

指定viewer的最小宽度

  • Type: Number
  • Default: 200

只在inline是true时生效

minHeight

指定viewer的最小宽度

  • Type: Number
  • Default: 100

只在inline是true时生效

movable

是否可以移动图片

  • Type: Boolean
  • Default: true

rotatable

是否允许旋转图片

  • Type: Boolean
  • Default: true

scalable

是否可以缩放图像

  • Type: Boolean
  • Default: true

zoomable

是否可以缩放图像

  • Type: Boolean
  • Default: true

zoomOnTouch

是否开启触摸缩放图像功能

  • Type: Boolean
  • Default: true

zoomOnWheel

是否开启鼠标缩放图像功能

  • Type: Boolean
  • Default: true

slideOnTouch

通过在触摸屏上滑动,可以滑动到下一个或上一个图像

  • Type: Boolean
  • Default: true

toggleOnDblclick

是否在双击图像时在其自然大小和初始大小之间切换图像大小;双击图像时自动调用切换方法

  • Type: Boolean
  • Default: true

tooltip

是否显示缩放百分比

  • Type: Boolean
  • Default: true

transition

是否使用CSS3过度

  • Type: Boolean
  • Default: true

zIndex

图片查看器modal模式时z-index值

  • Type: Number
  • Default: 2015

zIndexInline

图片查看器inline模式时z-index值

  • Type: Number
  • Default: 0

zoomRatio

鼠标滚轮滚动时缩放比例

  • Type: Number
  • Default: 0.1

minZoomRatio

最小缩放比例

  • Type: Number
  • Default: 0.01
    Define the min ratio of the image when zooming out.

maxZoomRatio

最大缩放比例

  • Type: Number
  • Default: 100
    Define the max ratio of the image when zooming in.

url

设置查看图片时的图片地址来源
如果它是一个字符串,它应该是每个图像元素的属性之一。
如果它是一个函数,它应该返回一个有效的图像URL。

  • Type: String or Function
  • Default: 'src'

ready

回调函数,就绪时调用

  • Type: Function
  • Default: null

show

回调函数,加载展示图层前调用

  • Type: Function
  • Default: null

shown

回调函数,加载展示图层完成后调用

  • Type: Function
  • Default: null

hide

回调函数,点击关闭展示按钮时调用

  • Type: Function
  • Default: null

hidden

回调函数,展示图层关闭前调用

  • Type: Function
  • Default: null

view

回调函数,加载展示图片前调用

  • Type: Function
  • Default: null

viewed

回调函数,加载展示图片后调用

  • Type: Function
  • Default: null

move

回调函数,图片移动时调用

  • Type: Function
  • Default: null

moved

回调函数,图片异动后调用

  • Type: Function
  • Default: null

rotate

回调函数,图片旋转前调用

  • Type: Function
  • Default: null

rotated

回调函数,图片旋转后调用

  • Type: Function
  • Default: null

scale

回调函数,图片缩放前调用

  • Type: Function
  • Default: null

scaled

回调函数,图片缩放后调用

  • Type: Function
  • Default: null

zoom

回调函数,图片缩放前调用

  • Type: Function
  • Default: null

zoomed

回调函数,图片缩放后调用

  • Type: Function
  • Default: null

play

回调函数,图片开始自动播放时调用

  • Type: Function
  • Default: null

stop

回调函数,图片停止自动播放时调用

  • Type: Function
  • Default: null

method

用法:获取到实例

 const viewer = this.$el.querySelector('.viewer').$viewer
 viewer.show()

show([immediate])

是否立即显示查看器,只在modal模式下有效

  • immediate (optional):
    • Type: Boolean
    • Default: false

view([index])

使用viewer查看下标为index的图片。如果viewer被隐藏,改图片将首先显示

  • index (optional):
    • Type: Number
    • Default: 0 (继承自 initialViewIndex )
    • 展示图片的下标
viewer.view(1); // 展示下标是1的图片(第二张)

prev([loop=false])

是否设置第一张图片的上一张是最后一张图片(头尾相接)

  • loop (optional):
    • Type: Boolean
    • Default: false

next([loop=false])

是否设置最后一张图片的下一张是第一一张图片(头尾相接)

  • loop (optional):
    • Type: Boolean
    • Default: false

move(x[, y = x])

使用相对偏移移动图像

  • x:

    • Type: Number
    • 水平方向上的移动距离
  • y (optional):

    • Type: Number
    • 竖直方向上的移动距离
    • 如果不存在,则其默认值为x

Move the image with relative offsets.

viewer.move(1);
viewer.move(-1, 0); // 左移
viewer.move(1, 0);  // 右移
viewer.move(0, -1); // 上移
viewer.move(0, 1);  // 下移

moveTo(x[, y = x])

移动图像到指定位置

  • x:

    • Type: Number
    • 新位置的水平坐标
  • y (optional):

    • Type: Number
    • 指定位置的竖直坐标
    • 如不存在,默认和 x相同.

rotate(degree)

在原来的基础上旋转图像

  • degree:
    • Type: Number
    • 向右旋转: 输入正数 (degree > 0)
    • 向左旋转: 输入负数 (degree < 0)
viewer.rotate(90);
viewer.rotate(-90);

rotateTo(degree)

旋转图像至指定角度

  • degree:
    • Type: Number
viewer.rotateTo(0); // 转到0°
viewer.rotateTo(360); // 转一圈

scale(scaleX[, scaleY])

图像翻转

  • scaleX:

    • Type: Number
    • Default: 1
    • 竖直方向翻转
    • 输入1时,不起作用
  • scaleY (optional):

    • Type: Number
    • 竖直方向翻转
    • 为空时,等于x
viewer.scale(-1); // Flip both horizontal and vertical
viewer.scale(-1, 1); // Flip horizontal
viewer.scale(1, -1); // Flip vertical

scaleX(scaleX)

图像水平方向翻转

  • scaleX:
    • Type: Number
    • Default: 1
    • 图像水平方向翻转
viewer.scaleX(-1); // Flip horizontal

scaleY(scaleY)

图像竖直方向翻转

  • scaleY:
    • Type: Number
    • Default: 1
    • 图像竖直方向翻转
    • 1时不起作用,不会发生变化
viewer.scaleY(-1); // Flip vertical

zoom(ratio[, showTooltip[, pivot]])

以指定比例缩放图像

  • ratio:

    • Type: Number
    • Zoom in: 放大:正数 (ratio > 0)
    • Zoom out: 缩小:负数 (ratio < 0)
  • showTooltip (optional):

    • Type: Boolean
    • Default: false
    • 是否展示缩放比例等提示信息
  • pivot (optional):

    • Type: Object
    • Default: null
    • Schema: { x: Number, y: Number }
    • 缩放的轴心点坐标
viewer.zoom(0.1);
viewer.zoom(-0.1);

zoomTo(ratio[, showTooltip[, pivot]])

缩放图像到指定比例

  • ratio:

    • Type: Number
    • 需要正数 (ratio > 0)
  • showTooltip (optional):

    • Type: Boolean
    • Default: false
    • 是否展示缩放比例等提示信息
  • pivot (optional):

    • Type: Object
    • Default: null
    • Schema: { x: Number, y: Number }
    • 缩放的轴心点坐标
viewer.zoomTo(0); // Zoom to zero size (0%)
viewer.zoomTo(1); // Zoom to natural size (100%)

// Zoom to 50% from the center of the window.
viewer.zoomTo(.5, {
  x: window.innerWidth / 2,
  y: viewer.innerHeight / 2,
});

play([fullscreen])

  • fullscreen (optional):
    • Type: Boolean or FullscreenOptions
    • Default: false
    • Indicate if request fullscreen or not.

Play the images.

stop()

停止播放

full()

inline模式下有效,播放时全屏

exit()

退出全屏
inline模式下有效

Events

所有事件都可以在其处理程序中使用this.viewe访问查看器实例。

Be careful to use these events with other components which have the same event names, e.g.: Bootstrap’s modal.

let viewer;

image.addEventListener('viewed', function () {
  console.log(this.viewer === viewer);
  // > true
});

viewer = new Viewer(image);

ready

viewer 准备好的时候会触发此事件,在modal模式下,只有点击查看了图片才会触发此事件

  • event.bubbles: true
  • event.cancelable: true
  • event.detail: null

show

viewer show的时候会触发此事件,只在modal 模式下有效

  • event.bubbles: true
  • event.cancelable: true
  • event.detail: null

shown

  • event.bubbles: true
  • event.cancelable: true
  • event.detail: null

This event fires when the viewer modal has shown.

Only available in modal mode.

hide

  • event.bubbles: true
  • event.cancelable: true
  • event.detail: null

This event fires when the viewer modal starts to hide.

Only available in modal mode.

hidden

  • event.bubbles: true
  • event.cancelable: false
  • event.detail: null

This event fires when the viewer modal has hidden.

Only available in modal mode.

view

  • event.bubbles: true
  • event.cancelable: true
  • event.detail.index:
    • Type: Number
    • The index of the original image.
  • event.detail.image:
    • Type: HTMLImageElement
    • The current image (a clone of the original image).
  • event.detail.originalImage:
    • Type: HTMLImageElement
    • The original image.

This event fires when a viewer starts to show (view) an image.

viewed

  • event.bubbles: true
  • event.cancelable: false
  • event.detail: the same as the view event.

This event fires when a viewer has shown (viewed) an image.

move

  • event.bubbles: true
  • event.cancelable: true
  • event.detail.x:
    • Type: Number
    • The new position in the horizontal direction.
  • event.detail.y:
    • Type: Number
    • The new position in the vertical direction.
  • event.detail.oldX:
    • Type: Number
    • The old position in the horizontal direction.
  • event.detail.oldY:
    • Type: Number
    • The old position in the vertical direction.
  • event.detail.originalEvent:
    • Type: Event or null
    • Options: pointermove, touchmove, and mousemove.

This event fires when a viewer starts to move an image.

moved

  • event.bubbles: true
  • event.cancelable: false
  • event.detail: the same as the move event.

This event fires when a viewer has moved an image.

rotate

  • event.bubbles: true
  • event.cancelable: true
  • event.detail.degree:
    • Type: Number
    • The new rotation degrees.
  • event.detail.oldDegree:
    • Type: Number
    • The old rotation degrees.

This event fires when a viewer starts to rotate an image.

rotated

  • event.bubbles: true
  • event.cancelable: false
  • event.detail: the same as the rotate event.

This event fires when a viewer has rotated an image.

scale

  • event.bubbles: true
  • event.cancelable: true
  • event.detail.scaleX:
    • Type: Number
    • The new scaling factor in the horizontal direction.
  • event.detail.scaleY:
    • Type: Number
    • The new scaling factor in the vertical direction.
  • event.detail.oldScaleX:
    • Type: Number
    • The old scaling factor in the horizontal direction.
  • event.detail.oldScaleY:
    • Type: Number
    • The old scaling factor in the vertical direction.

This event fires when a viewer starts to scale an image.

scaled

  • event.bubbles: true
  • event.cancelable: false
  • event.detail: the same as the scale event.

This event fires when a viewer has scaled an image.

zoom

  • event.bubbles: true
  • event.cancelable: true
  • event.detail.ratio:
    • Type: Number
    • The new (next) ratio of the image (imageData.width / imageData.naturalWidth).
  • event.detail.oldRatio:
    • Type: Number
    • The old (current) ratio of the image.
  • event.detail.originalEvent:
    • Type: Event or null
    • Options: wheel, pointermove, touchmove, and mousemove.

This event fires when a viewer starts to zoom (in or out) an image.

zoomed

  • event.bubbles: true
  • event.cancelable: false
  • event.detail: the same as the zoom event.

This event fires when a viewer has zoomed (in or out) an image.

play

  • event.bubbles: true
  • event.cancelable: true
  • event.detail: null

This event fires when the viewer starts to play.

You can abort the playing process by calling event.preventDefault().

stop

  • event.bubbles: true
  • event.cancelable: true
  • event.detail: null

This event fires when the viewer starts to stop.

You can abort the stopping process by calling event.preventDefault().

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

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

相关文章

idea / eclipse 配置 Tomcat 并发布 Web 项目

文章目录tomcat 安装配置简介下载安装系统环境配置优化配置修改默认内存管理员用户名和密码设置支持中文文件名称idea 配置 tomcat 并发布 web 项目项目创建为项目添加 tomcat发布测试eclipse 配置 tomcat 并发布 web 项目引入 tomcat建立 web 项目发布测试总结本篇内容主要讲述…

python Web开发 flask轻量级Web框架实战项目--实现功能--账号密码登录界面(连接数据库Mysql)

ps&#xff1a;各位好久不见&#xff0c;我回家了&#xff01;终于有时间把之前的一些东西整理一下了&#xff08;好吧&#xff0c;之前是我太懒了&#xff09;&#xff0c;今天分享一个功能简单的python web实战项目&#xff0c;后期功能可自行丰富。 先看效果 输入正确用户名…

猿创征文|【C++游戏引擎Easy2D】我拿吃零食的时间,学会了在C++上添加可点击按钮

&#x1f9db;‍♂️iecne个人主页&#xff1a;&#xff1a;iecne的学习日志 &#x1f4a1;每天关注iecne的作品&#xff0c;一起进步 &#x1f4aa;学C必看iecne 本文专栏&#xff1a;【C游戏引擎】. &#x1f433;希望大家多多支持&#x1f970;一起进步呀&#xff01; ✨前…

vuex报错:Property or method “$store“ is not defined on the instance but referenced during render. Make

‘store’ is defined but never used no-unused-vars 最近在写vuex&#xff0c;报过一个这样的错误&#xff1a; Property or method “$store” is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the da…

结合表单验证谈el-form中model、prop、rules属性

目录前言modelproprules验证总结前言 最近写vue项目需要用element ui中的表单组件显示一些信息呈现在页面上&#xff0c;但在使用提供的一些属性时有些困惑——这三者之间有什么关系&#xff0c;必须要同时存在吗&#xff1f;于是在这里做一些记录。 model 官方说是表单中的数…

flex布局中使用flex-wrap实现换行

最近做个项目,其中有个样式是换行布局,作为样式渣渣的我一开始不会,只能查资料,然后摆平了它.今天得空了,简要记录一下,方便后面小伙伴布局使用. 参考资料 flex-wrap 开始样式 <div class"planWrap"><div class"content planItem">1</div…

vue 父传子 子传父实现方式

父传子&#xff1a; 主要步骤&#xff1a; 首先在子组件props中创建一个属性&#xff0c;用以接收父组件传过来的值&#xff1b;然后父组件中引用子组件&#xff0c;并在子组件标签中添加子组件props中创建的属性&#xff1b;最后把需要传给子组件的值赋给该属性。 理解&#…

Vue父子组件生命周期执行顺序

要想弄懂Vue父子组件的生命周期执行顺序&#xff0c;首先要知道vue页面的生命周期钩子函数的执行顺序&#xff0c;这也是在面试中老生常谈的问题&#xff0c;同时相信大家在工作的时候也能经常碰到父子组件加载上的问题&#xff0c;所以&#xff0c;不管是面试还是工作&#xf…

前端常见的时间转换方法合集+动态时钟效果实现

1.将时间戳转换为YYYY-MM-DD HH:mm:ss格式-老方法 通过对应的年月日时分秒依次进行拼接&#xff0c;另外还需要对小于10的值进行处理&#xff0c;在前面添加字符串‘0’&#xff0c;转换为常见的两位数时间格式 function transformTime(timestamp new Date()) { if (time…

Vue实现生成二维码

目 录 ①首先创建一个vue项目 ②引入qrcodejs2 ③封装组件 1. 创建Vue文件 2. 定义template模板 3. 引入QRCode包 4. 进行封装 5. less控制样式 ④启动项目 1. 在终端输入启动项目命令 2. 在浏览器中输入访问地址 3. 访问生成的二维码 4. 扫码进行解析 与后端用J…

CSS实现文字描边效果

一、介绍 最近在一个项目的宣传页中&#xff0c;设计师使用了文字描边效果&#xff0c;之前我确实没有实现过文字的描边效果&#xff0c;然后我在查阅资料后&#xff0c;知道了实现方法。文字描边分为两种&#xff1a;内外双描边和单外描边&#xff0c;也就是指在给文字加上描…

ElementPlus DateTimePicker日期时间选择器限制可选时间范围(精确时分秒)

项目场景 ElementPlus DateTimePicker日期时间选择器 当我们使用日期时间选择器时&#xff0c;可能会有需求只能选择今日之前或者今日之后&#xff0c;又或者一周内&#xff0c;一个月内的时间&#xff0c;而其他的时间应该禁止被用户选择。 解决 直接看文档&#xff1a; …

【element】el-autocomplete的常见用法

前言&#xff1a; 这段时间突然发现很少写博客了&#xff0c;平时都在平衡工作和休息的时间&#xff0c;周末也没动过笔&#xff0c;而且更重要的是我找不到写的内容了&#xff0c;在经历的初始的新知识的学习阶段后&#xff0c;目前的阶段更加转入对于业务的理解&#xff0c;…

vite基本配置教程

&#x1f469; 个人主页&#xff1a;不爱吃糖的程序媛 &#x1f64b;‍♂️ 作者简介&#xff1a;前端领域新星创作者、CSDN内容合伙人&#xff0c;专注于前端各领域技术&#xff0c;成长的路上共同学习共同进步&#xff0c;一起加油呀&#xff01; ✨系列专栏&#xff1a;前端…

C1认证之web基础知识及习题——我的学习笔记

文章目录 目录 文章目录 前言​​​​​​​ Web基础 十四、语义化标签 知识点 习题 十五、表单标签 知识点 习题 十六、转义字符 知识点 习题 十七、Head头 知识点 习题 十八、CSS引入方式 知识点 习题 十九、CSS背景 知识点 习题 二十、CSS文本属性 …

CSS合并单元格四种方式:table/display/flex/grid

目录 方式一&#xff1a;table【最简单写法】 方式二&#xff1a;display: table--不推荐 方式三&#xff1a;display: flex 方式四&#xff1a;display: grid 效果图&#xff1a; 方式一&#xff1a;table【最简单写法】 colspan&#xff1a;规定单元格可横跨的列数。row…

【vue2】近期bug收集与整理02

⭐【前言】 在使用vue2构建页面时候&#xff0c;博主遇到的问题难点以及最终的解决方案。 &#x1f973;博主&#xff1a;初映CY的前说(前端领域) &#x1f918;本文核心&#xff1a;博主遇到的问题与解决思路 目录⭐数据枚举文件的使用⭐elementUI中分页组件使用的注意事项⭐v…

vue解决Not allowed to load local resource

前言 在进行通过本地路径进行加载图片的时候&#xff0c;突然就报了这个问题 Not allowed to load local resource 这个是由于安全性的问题&#xff0c;导致浏览器禁止直接访问本地文件 那么&#xff0c;这边我说一下我具体是怎么解决的吧 问题描述 我的项目是用的vue的vant…

webpack -v报错:Cannot find module ‘webpack-cli/package.json‘

-D安装了webpack和webpack-cli&#xff0c;-g安装了webpack和webpack-cli&#xff0c;但是webpack -v的时候仍然提示需要安装webpack-cli&#xff0c;并且安装之后会报错&#xff1a; 看提示应该是webpack-cli/package.json的位置获取不到正确的&#xff0c;但是并不知道为什么…

【附源码】解决pdf.js跨域并从url动态加载pdf文档

0. Abstract 当我们想用PDF.js从URL加载文档时&#xff0c;将会因遇到跨域问题而中断&#xff0c;且是因为会触发了PDF.js和浏览器的双重CORS block&#xff0c;这篇文章将会介绍&#xff1a;①如何禁用pdf.js的跨域&#xff1f;②如何绕过浏览器的CORS加载URL文件&#xff1f…