vue3+ts 自定义el-slider,原点显示数字

vue3+ts 自定义el-slider,原点显示数字

先看效果图:
不可转发,请尊重原创

这里我默认使用的是element-Plus的el-slider组件
原始效果是这样的:
在这里插入图片描述
可以查看官网自行查看:https://element-plus.gitee.io/zh-CN/component/slider.html

如何实现的呢:

这里先说一下原理,使用的原理是css的content属性,如果不知道的请自行学习后查看本文。在结合::after和::before伪元素结合;

第一

看页面html+css判断进行操作的class是谁?

在这里插入图片描述
主要修改.el-slider__button-wrapper 修改el-slider__button是为了把原点改成方形,这样可以显示更多内容;其代码是:

// 改变滑块原点大小和颜色  el-slider__button
:deep() .el-slider__button {
    color: red;
    width: 40px;
    height: 30px;
    border-radius: 10px;
    z-index: 1;
    top: var(--el-slider-button-wrapper-offset);
    // transform: translateX(-50%);
    background-color: #fff;
    text-align: center;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    line-height: normal;
    outline: 0;
}

// 更改 el-slider__button-wrapper
:deep() .el-slider__button-wrapper {
    height: var(--el-slider-button-wrapper-size);
    width: var(--el-slider-button-wrapper-size);
    position: absolute;
    z-index: 1;
    top: var(--el-slider-button-wrapper-offset);
    transform: translateX(0); // 去掉滑块默认X轴翻转
    background-color: transparent;
    text-align: center;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    line-height: normal;
    outline: 0;
}

// 滑块中间显示内容
:deep() .el-slider__button-wrapper::before {
	content: attr(aria-valuetext);// !!显示的内容,注意,一定是这个
	position: absolute;
	width: 20px;
	height: 25px;
	line-height: 25px;
	border-radius: 5px;
	text-align: center;
	top: 5px;
	left: 7.5px;
  font-size: 12px;
  z-index: 999;
}

// 去掉滑块默认鼠标移入事件
:deep() .el-slider__button-wrapper.hover {
	transform: none;
}
:deep() .el-slider__button-wrapper::hover {
  transform: none;
}

:deep() .el-slider__button.hover {
  transform: none;
}
:deep() .el-slider__button::hover {
  transform: none;
}



// 去掉input 边框和输入聚焦
:deep() .el-input__wrapper {
    display: inline-flex;
    flex-grow: 1;
    align-items: center;
    justify-content: center;
    padding: 1px 11px;
    background-color: var(--el-input-bg-color, var(--el-fill-color-blank));
    background-image: none;
    border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
    cursor: text;
    transition: var(--el-transition-box-shadow);
    transform: translate3d(0,0,0);
    box-shadow: none;
}

:deep() .el-input__wrapper.is-focus{
  box-shadow: none;
}

:deep() .el-input__wrapper:hover{
  box-shadow: none;
}

这个我写的不是很清楚,下次进行编辑吧,太晚了。上面是全部的css代码,如果是使用的vue3+ts+scss的,可以复制粘贴进行使用。注意添加scoped范围;

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对你的问题,我可以给你提供一些思路和代码示例。 首先,你可以使用 `el-upload` 组件的 `before-upload` 和 `action` 属性来实现自定义上传图片的功能。具体来说,`before-upload` 用于在上传图片之前进行一些处理,而 `action` 则指定了上传图片的地址。 其次,在使用 `typescript` 时,你需要定义上传图片的数据类型。在 `vue3` 中,你可以使用 `defineComponent` 函数来定义组件,并使用 `ref` 来引用组件中的数据。 下面是一个示例代码,供你参考: ``` <template> <el-upload class="upload-demo" :action="uploadUrl" :before-upload="beforeUpload" :show-file-list="false"> <el-button size="small" type="primary">点击上传</el-button> </el-upload> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; interface UploadResponse { code: number; data: string; } export default defineComponent({ setup() { const uploadUrl = ref('your_upload_url'); const beforeUpload = (file: File) => { // 在上传之前处理图片 return true; }; const handleUploadSuccess = (response: UploadResponse) => { // 处理上传成功后的响应 }; return { uploadUrl, beforeUpload, handleUploadSuccess, }; }, }); </script> ``` 在这个示例中,我定义了一个 `UploadResponse` 接口来表示上传图片后的响应数据类型。在 `setup` 函数中,我使用 `ref` 来定义了 `uploadUrl` 变量,并将其传递给 `el-upload` 组件的 `action` 属性。同时,我还定义了 `beforeUpload` 和 `handleUploadSuccess` 函数来处理上传前和上传后的数据。 当然,这只是一个简单的示例,你还需要根据具体的需求进行代码的修改和优化。希望这些信息能够对你有所帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值