美文网首页Web 前端开发
JQuery UI - Progressbar Widget

JQuery UI - Progressbar Widget

作者: ghwaphon | 来源:发表于2016-09-23 17:07 被阅读199次

    默认使用效果

    demo01.png
    <div id="progressbar"></div>
    

    HTML 代码中我们只是简单的定义了一个div,和之前介绍的方法一样,我们也是简单的调用一个 progressbar() 方法即可 显示出图片中的效果。

    <script>
        $(document).ready(function () {
            $("#progressbar").progressbar({
                value: 50
            });
        })
    </script>
    

    这里,我们将进度条的值设置成了50,当然这个值可以随意指定。现在我们看到的还是一个静态的效果,显然是不能满足我们的,一个静态的进度条对我们而言毫无意义,下面就来看看动态的效果该如何实现。

    动态加载

    demo02.gif

    可见,这个效果还是很有利用价值的,下面我们就看看是怎么做到的。

    <div id="progressbar">
        <div id="progressbar-label"></div>
    </div>
    

    在这里,我们又嵌套了一个 div 标签,用于摆放加载时进度的变化。下面我们需要书写 CSS 样式,将 progressbar-label 中的值放到进度条当中去。

    <style>
        #progressbar {
            width: 320px;
            position: relative;
        }
    
        #progressbar-label {
            position: absolute;
            top: 6px;
            left: 48%;
        }
    </style>
    

    我们将 left 属性设置成了 48%,并没有设置成居中,因为我们还有一个文字宽度,如果设置成 50%,就显得靠右了。其实,我也不知道怎么可以将这个文字设置成居中,我尝试了好几个属性,但是都失败了。如果有人知道,请在下方留言教教我,万分感谢。

    <script>
        $(document).ready(function () {
            var progressbar = $("#progressbar");
            var progressbarLabel = $("#progressbar-label");
    
            progressbar.progressbar({
                value: false,
                change: function () {
                    progressbarLabel.text(progressbar.progressbar("value") + "%");
                },
                complete: function () {
                    progressbarLabel.text("100%");
                }
            })
    
            function progress() {
                var value = progressbar.progressbar("value") || 0;
                progressbar.progressbar("value", value + 2);
    
                if (value < 99) {
                    setTimeout(progress, 100);
                }
            }
    
            setTimeout(progress, 1000);
        })
    </script>
    

    1.将 progressbarvalue 设置成 false,这么设置有什么效果呢?看上面的图片,在刚开始的时候一个动态的波浪效果,这么设置就是让这个效果出现。

    2.在 progress() 方法中我们使用了一个递归调用,也就是每隔 0.1s 调用一下自身方法,进行更新 progressbar 的值。在方法的外面,我们将延迟时间设置成了 1s , 主要是为了将刚开始加载的动态效果显示的更明显一些。

    弹出框下载效果

    demo03.gif
    <div id="dialog" title="下载">
        <div id="progressbar-label">正在加载</div>
        <div id="progressbar"></div>
    </div>
    
    <button type="button" id="openBtn">打开</button>
    

    关于 html 代码我们就不再对其进行讲解,直接跳过,去看 JS 代码。

    <script>
        $(document).ready(function () {
            var dialog = $("#dialog");
            var progressbar = $("#progressbar");
            var progressLabel = $("#progressbar-label");
            var progressTimer;
            dialogButtons = [{
                text: "取消下载",
                click: closeDownload
            }];
    
            dialog.dialog({
                autoOpen: false,
                modal: true,
                resizable: false,
                buttons: dialogButtons
            });
    
            $("#openBtn").button().on("click", function () {
                dialog.dialog("open");
                setTimeout(progress, 2000);
            })
    
            progressbar.progressbar({
                value: false,
                change: function () {
                    progressLabel.text("正在下载 : " + progressbar.progressbar("value") + "%");
                },
                complete: function () {
                    progressLabel.text("下载完成");
                    dialog.dialog("option", "buttons", [{
                        text: "关闭",
                        click: closeDownload
                    }]);
                }
    
            })
    
            function progress() {
                var value = progressbar.progressbar("value") || 0;
                progressbar.progressbar("value", value + 2);
                if (value <= 99) {
                    progressTimer = setTimeout(progress, 30);
                }
            }
    
            function closeDownload() {
                clearTimeout(progressTimer);
                dialog.dialog("close");
                progressbar.progressbar("value", false);
                progressLabel.text("正在加载");
            }
    
    
        })
    </script>
    

    1.一开始,我们声明了几个变量,接下来我们就可以通过变量对页面标签进行操作。

    2.以上效果其实就是 DialogProgressbar 的使用,大多数属性在以上我们都已经介绍过了,下面我们针对逻辑进行讲解。首先,将弹出框设置成 关闭状态,对 openBtn 绑定点击事件,当点击触发的时候,将弹出框打开,并且此时开始启动 setTimeout()方法,开始让 Progressbar 进行加载,至于在其他地方我们对 ProgressLabel 文字的修改和对Dialog 按钮文字的修改,我们就不再进行讲解。

    注意到,我们上面的Progressbar 的颜色不再是默认的灰色了,这是怎么修改的呢?这个属性我们可以在 CSS 中就行修改。

    <style>
        #progressbar-label {
            margin-bottom: 20px;
            font-weight: bold;
        }
    
        .ui-dialog-titlebar-close {
            display: none;
        }
    
        #progressbar .ui-progressbar-value{
            background-color: aquamarine;
        }
    </style>
    

    1.第一处是对 ProgressLabel 进行位置和字体设定。

    2.第二处是将弹出框右上角的关闭按钮进行隐藏。

    3.第三处就是将Progressbar 的背景颜色进行改变,我们可以将其改编成任意值。

    相关文章

      网友评论

        本文标题:JQuery UI - Progressbar Widget

        本文链接:https://www.haomeiwen.com/subject/oaazettx.html