uview slider样式改造

文章讲述了如何在二次封装UView滑动选择器中,通过给滑块和轨道添加动态伪类并手动获取DOM来实现自定义UI效果,特别提到了attr()方法用于动态内容以及uni-app中阻止冒泡的注意事项。
摘要由CSDN通过智能技术生成

 二次封装uview滑动选择器,达到UI效果(给里面的滑块,轨道添加伪类,其中动态进度的伪类必须手动获取dom,添加自定义属性)

<template>
	<view class="container">
		<view class="label">
			快捷打分
		</view>
		<view class="slider">
			<u-slider id="scoreID" v-model="fastScore" step="1" min="70" max="90"></u-slider>
		</view>
	</view>
</template>

<script>
	export default {
		name: "classReview",
		data() {
			return {
				fastScore: 80
			};
		},
		watch: {
			fastScore: {
				handler(val) {
					this.$nextTick(() => {
						console.log(document.querySelector('#scoreID .uni-slider-thumb'), '999')
						document.querySelector('#scoreID .uni-slider-thumb').setAttribute('score', val + '分')
					})

				},
				immediate: true
			}
		},
		mounted() {

		}
	}
</script>

<style lang="scss" scoped>
	.container {
		box-sizing: border-box;
		width: 100%;
		padding: 0 40rpx;

		.label {}

		.slider {
			width: 100%;

			::v-deep .uni-slider-tap-area {
				position: relative;

				&::before {
					position: absolute;
					content: '70分';
					top: 32rpx;
					left: -16rpx;
					font-size: 28rpx;
				}

				&::after {
					position: absolute;
					content: '90分';
					top: 28rpx;
					right: -16rpx;
					font-size: 28rpx;
				}
			}

			::v-deep .uni-slider-handle-wrapper {
				position: relative;
				z-index: 1;

				&::before {
					position: absolute;
					content: '';
					top: -8rpx;
					left: -16rpx;
					z-index: 2;
					width: 12rpx;
					height: 12rpx;
					border-radius: 50%;
					border: 4rpx solid #155BD4;
				}

				&::after {
					position: absolute;
					content: '';
					top: -8rpx;
					right: -16rpx;
					z-index: 0;
					width: 12rpx;
					height: 12rpx;
					border-radius: 50%;
					border: 4rpx solid #DCDEE0;
				}
			}

			::v-deep uni-slider .uni-slider-thumb {
				box-sizing: border-box;
				border: 4rpx solid #155BD4;

				&::after {
					font-size: 28rpx;
					position: absolute;
					content: attr(score);
					top: 32rpx;
					right: -50%;
					white-space: nowrap;
				}
			}

		}
	}
</style>

注意点:伪元素的content是动态值时,attr()内的取值变量必须定义在当前的dom上

                uniapp stop阻止冒泡 必须加上@click.native.stop(题外话)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值