js实现进度条的拖拽_☆*往事随風*☆的博客


前言

利用js实现一个进度条拖拽的demo。


一、代码分析

1.搭建一个进度条

html代码如下(示例):

 <!-- 外部容器 -->
    <div class="wrappers">
        <!-- 包裹进度条 -->
        <div class="wrapper">
            <!-- 进度条 -->
            <div id="progress">
                <!-- 进度条右边圆角 -->
                <div id="progress-bar"></div>
            </div>
        </div>
        <!-- 设置进度条默认显示 0%-->
        <span id="show">0%</span>
    </div>

2.对进度条进行一定的样式修改

css代码如下(示例):

/*清除浏览器默认样式*/
*{
    margin:0;
    padding:0;
}
/* 设置外部容器 */
.wrappers{
    width:900px;
    height:6px;
    margin:100px auto;
}
/* 设置进度条容器 */
.wrapper{
    width:800px;
    height:6px;
    margin-bottom:0;
    line-height:6px;
    position:relative;
    background-color:hsl(108, 100%, 83%);
}
/* 设置进度条显示颜色 */
#progress{
    width:0;
    height:100%;
    background-color:red;
}
/* 设置进度条右侧圆点 */
#progress-bar{
    width:20px;
    height:20px;
    position:absolute;
    bottom:-6px;
    border-radius: 50%;
    background-color:hsl(252, 100%, 83%);
}
/* 设置显示百分比 */
#show{
    position:relative;
    left:840px;
    top:-12px;
}

3.对进度条应用js代码

1.老规矩先为全局对象window添加onload事件,让js代码后加载,之后的代码全部写在这里边。

window.onload = function(){

};

2.然后分别获取进度条对象(progress)、进度条右边拖动圆角对象(progress-bar)和百分比显示对象(show)。
 			// 获取progress对象
            var progress = document.getElementById("progress");
            // 获取show对象
            var show = document.getElementById("show");
            // 获取progress_bar对象
             // 为进度条右侧圆点绑定鼠标按下事件
            var progress_bar =  document.getElementById("progress-bar");

3.为progress-bar对象分别绑定鼠标按下事件,鼠标移动事件,鼠标抬起事件。这里要注意,progress-bar的鼠标移动事件和鼠标抬起事件,要写在鼠标按下事件的里边。这样才能实现拖拽的功能。
   // 为进度条右侧圆点绑定鼠标按下事件
            var progress_bar =  document.getElementById("progress-bar");
            progress_bar.onmousedown = function(event){
                event = event || window.event;
                //获取圆点偏移量
                var progressLeft = event.clientX - this.offsetLeft;

                // 为右侧圆点绑定拖动事件
                document.onmousemove = function(event){
                    event = event || window.event;
                    // 获取鼠标坐标
                    var progressX = event.clientX - progressLeft;
                     // 暂停拖动(如果拖动条超出范围,则停止拖动)
                    if(progressX<=0){
                        progressX = 0;
                    }
                    else if(progressX>=800){
                        progressX = 800;
                    }
                    console.log(progressX);
                    progress_bar.style.left = progressX+"px";
                    // 显示进度条
                    progress.style.width = progressX+"px";
                    // 显示进度条百分比
                    show.innerHTML = Math.round(progressX/8)+"%";

                };

                // 为右侧圆点绑定鼠标抬起事件
                document.onmouseup = function(event){
                    event = event || window.event;
                    // 取消鼠标移动事件
                    document.onmousemove = null;
                    // 取消鼠标抬起事件
                    document.onmouseup = null;
                };
                return false;
            };

<br//>

4.js整体代码

	<script type="text/javascript">
        window.onload = function(){
            // 获取progress对象
            var progress = document.getElementById("progress");
            // 获取show对象
            var show = document.getElementById("show");
            // 获取progress_bar对象
             // 为进度条右侧圆点绑定鼠标按下事件
            var progress_bar =  document.getElementById("progress-bar");
            progress_bar.onmousedown = function(event){
                event = event || window.event;
                //获取圆点偏移量
                var progressLeft = event.clientX - this.offsetLeft;

                // 为右侧圆点绑定拖动事件
                document.onmousemove = function(event){
                    event = event || window.event;
                    // 获取鼠标坐标
                    var progressX = event.clientX - progressLeft;
                    if(progressX<=0){
                        // 暂停拖动(如果拖动条超出范围,则停止拖动)
                        progressX = 0;
                    }
                    else if(progressX>=800){
                        progressX = 800;
                    }
                    console.log(progressX);
                    progress_bar.style.left = progressX+"px";
                    // 显示进度条
                    progress.style.width = progressX+"px";
                    // 显示进度条百分比
                    show.innerHTML = Math.round(progressX/8)+"%";

                };

                // 为右侧圆点绑定鼠标抬起事件
                document.onmouseup = function(event){
                    event = event || window.event;
                    // 取消鼠标移动事件
                    document.onmousemove = null;
                    // 取消鼠标抬起事件
                    document.onmouseup = null;
                };
                //取消浏览器对拖拽内容进行搜索的默认行为
                return false;
            };

        };
    </script>

说明:
1.我们要将鼠标移动事件和鼠标抬起事件绑定给document,因为如果只绑定给progress-bar则会出现鼠标离开进度条圆点时,进度条无法拖动和鼠标在进度条圆点上即使不点击也会进行拖动的现象。
2.当我们拖拽一个网页中的内容时,浏览器会默认去搜索引擎中搜索内容,此时会导致拖拽功能的异常,这个是浏览器提供的一个默认行为。 如果不希望发生这个行为则可以通过return false来取消这一行为。这个方法对IE8及其以下浏览器无效。

5.运行结果

在这里插入图片描述


总结

通过这节内容来对js事件相关属性和方法进行一个练习。这个例子也比较简单,之后还会更新原生js编写一个视频播放的demo,这个例子也会应用到其中。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

☆*往事随風*☆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值