05 - 进度条拖拽


HTML

<div id="progress">
    <div class="bar">
        <div class="hang"></div>
        <span></span>
    </div>
    <div class="pro-value">0%</div>
</div>

Css样式

<style>
        * {
            margin: 0;
            padding: 0;
            border: 0;
        }

        #progress {
            width: 1000px;
            height: 35px;
            line-height: 35px;
            margin: 100px auto;
            position: relative;
        }

        .bar {
            width: 900px;
            height: 100%;
            background: #ccc;
            border-radius: 8px;
            position: relative;
        }

        .pro-value {
            position: absolute;
            right: 30px;
            top: 0;
        }

        .hang {
            width: 0;
            height: 100%;
            background: #f40;
            border-radius: 8px 0 0 8px;
        }

        span {
            width: 25px;
            height: 49px;
            background: #f40;
            position: absolute;
            left: 0;
            top: -7px;
            border-radius: 5px;
            cursor: pointer;
        }
</style>

Js代码

<script>
        window.onload = function () {
            // 1. 获取页面标签
            var progress = document.getElementById('progress');
            var bar = progress.children[0];
            var hang = bar.children[0];
            var mask = bar.children[1];
            var proValue = progress.children[1];

            // 2. 监听鼠标拖拽事件
            mask.onmousedown = function (event) {
                var event = event || window.event;

                // 2.1 求出初始值
                var initial = event.clientX - mask.offsetLeft;

                document.onmousemove = function (event) {
                    var event = event || window.event;

                    // 2.2 求出走过的距离
                    var distanceX = event.clientX - initial;

                    // 2.3 处理边界值
                    if (distanceX < 0) {
                        distanceX = 0;
                    }
                    else if (distanceX >= bar.offsetWidth - mask.offsetWidth) {
                        distanceX = bar.offsetWidth - mask.offsetWidth;
                    }
                    // 2.3 赋值给小按钮
                    mask.style.left = distanceX + 'px';
                    hang.style.width = distanceX + 'px';
                    // 2.4 算出百分比
                    proValue.innerHTML = parseInt(distanceX / (bar.offsetWidth - mask.offsetWidth) * 100) + '%';

                    return false;

                }
                // 2.5 结束拖拽和移动事件
                document.onmouseup = function () {
                    document.onmousemove = null;
                    document.onmouseup = null;
                }
                return false;
            }
        }
</script>

特效展示

进度条
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,814评论 1 92
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,552评论 25 708
  • 仿佛冷风吹过,冬天就来了。 灰蒙阴冷的天,让人想蜷缩在暖气小屋(寝室)里就此冬眠。才不过初冬时节,却厌倦了沉重,实...
    歌颂者singer阅读 230评论 0 1
  • 每当深夜或者凌晨我特困睡不着的时候 都会有一些特别惊人的好想法 惊到我自己都害怕 然后想完了就心满意足的睡了 睡醒...
    宏红阅读 212评论 0 0
  • 教育·你们培养了千百个武亦姝更培养了千千万万个普通人 作者:微澜细语 2002年春天,诺丁汉大学教育领导中心Pet...
    简黛玉阅读 11,511评论 4 126