可拖动进度条的实现

可拖动进度条的实现

  • 大家好,今天工作不忙 分享一个简单的进度条案例.希望有需要的小伙伴可以看到.思路不一定是最好的.但绝对适合初学者

    首先 进度条的功能,你需要知道 进度条拖动前后 一共触发了3个事件
    即:
    1.鼠标按下事件
    2.鼠标拖动事件
    3.鼠标抬起事件

    其次 他的拖动原理是 通过计算当前拖动的坐标位置 减去进度条盒子到视口的距离.
    最后把进度条按钮 进行相应距离的偏移
    偏移的距离=鼠标当前的坐标-盒子到窗口边缘的距离;
    ​ 然后 元素本身.css( ‘左或右’, 偏移的距离+‘px’ );
    代码如下:
    html:

<div class="progress-box">
        <div class="progress-bar"></div>
        <div class="progress-btn"></div>
        <span class="progress-num">0</span>
    </div>
    <!-- box外部盒子 bar进度条 btn拖动按钮 num给外部一个显示拖动的数字	
     -->

CSS样式

.progress-box {
            width: 200px;
            position: relative;
            height: 30px;
            padding: 5px;
            background-color: #ccc;
        }

        .progress-bar {
            width: 94%;  /*宽度不是100%因为考虑到按钮本身也占据了15px的宽度 你设置100 按钮就会溢出;*/
            height: 10px;
            position: absolute;
            background-color: pink;
            border-radius: 10px;
            top: 5px;
        }

        .progress-btn {
            width: 15px;
            height: 15px;
            position: absolute;
            background-color: #fff;
            border-radius: 5px;
            top: 2.5px;
            left: 0;
        }

        .progress-btn:hover {
            background-color: orange;
            cursor: pointer;
        }

        .progress-num {
            /* text-align: center; */
            position: absolute;
            bottom: 0;
            left: 50%;
            font-size: 12px;
            transform: translateX(-50%);
        }

逻辑:本文使用到了JQ 逻辑也相对简单

$(function(){
	           let $progressBox = $(".progress-box");
            $progressBox.find(".progress-btn").on("mousedown", function (e) {
                // 防止冒泡 阻止默认行为
                var e = window.event || e;
                if (e.stopPropagation) {
                    e.stopPropagation();
                } else {
                    e.cancelBabble = true;
                };
                // alert(123)

                console.log(e.pageX);
                //dix是盒子到窗口的位置
                var $diX = e.pageX - this.offsetLeft;
                var _self = this;
                $(document).on("mousemove.ghtx", function (e) {
                    // 计算当前 拖动的距离(点击位置的距离减去盒子到窗口的距离  ) 如果小于0就等0 大于185就等185
                    var $left = e.pageX - $diX;
                    var $x = $left < 0 ? 0 : $left > 185 ? 185 : $left;
                    // 拖动时 有数字反馈 把拖动的距离除以2 +%符号

                    // 这里应该使用兄弟选择器,这样即使复用,也不含干扰其他相同元素
                    $(_self).next().text(parseInt($x / 1.85) + '%');
                    // 然后再让  按钮进行相应的偏移 因为是绝对定位 直接便宜即可
                    $(_self).css('left', $x + 'px');
                });

                // 最后当鼠标抬起时  关闭以上俩个事件
                $(document).on("mouseup.ghtx",function(){
                    $(document).off("mousemove.ghtx mouseup.ghtx" )
                })
            })


})

以上就是案例的全部啦.感谢观看

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 uniapp 中实现拖动进度条,你可以按照以下步骤进行操作: 1. 在你的页面中添加一个进度条组件,可以使用 `<progress>` 标签或者第三方组件库中的进度条组件。例如,如果你使用的是 uni-ui 组件库,可以使用其提供的 `<uni-progress>` 组件。 2. 在 data 中添加一个变量来存储进度条的当前值。例如,你可以在 data 中添加一个名为 `progressValue` 的变量,并将其初始化为某个默认值。 3. 监听进度条拖动事件,当用户拖动进度条时,更新当前的进度条值。具体的实现方式取决于你选择的组件库和进度条组件。一般而言,你需要监听其 `change` 或 `drag` 事件,并在事件回调中更新 `progressValue` 变量。 4. 使用计算属性或监听器来动态更新页面中展示进度条的样式。根据 `progressValue` 的值,你可以设置进度条的宽度或者其他相关样式属性。 下面是一个简单的示例代码,演示了如何在 uniapp 中实现拖动进度条: ``` <template> <view> <uni-progress :percent="progressValue" @change="handleProgressChange"></uni-progress> </view> </template> <script> export default { data() { return { progressValue: 50, // 初始化进度条值 }; }, methods: { handleProgressChange(value) { this.progressValue = value; // 更新进度条值 }, }, }; </script> ``` 在上面的示例中,我们使用了 uni-ui 组件库中的 `<uni-progress>` 组件,并通过 `:percent` 属性绑定了进度条的值。在 `@change` 事件回调中,我们更新了 `progressValue` 变量。 请根据你的具体需求和所使用的组件库,调整代码以实现你想要的效果。希望对你有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值