La barre de progression est l'un des derniers composants ajoutés à la bibliothèque d'excellents widgets d'interface utilisateur et d'aides interactives construites sur jQuery. Il a été introduit dans la dernière version de la bibliothèque, 1.7 au moment de la rédaction.
La barre de progression n'est actuellement que déterministe, ce qui signifie que lorsque nous la mettons à jour, nous devons lui indiquer explicitement quelle est sa valeur, et nous devons savoir à l'avance quand le processus qu'elle mesure est terminé. Ce widget n'est actuellement pas le meilleur choix pour les processus qui nécessitent une durée indéterminée.
Il s'agit d'un widget très simple avec une petite API qui expose un nombre limité de propriétés et de méthodes, mais il reste très efficace et idéal pour fournir un retour visuel aux visiteurs sur le pourcentage restant avant la fin d'un processus.
Nous avons besoin d'une copie de la version actuelle de jQuery UI, qui peut être obtenue auprès du générateur de téléchargement à l'adresse http://jqueryui.com/download. Une fois téléchargé, nous devons le décompresser afin que la structure de répertoires existante soit préservée. Nous devons créer un nouveau répertoire sur notre ordinateur appelé jQuery UI, puis créer un autre nouveau dossier à l'intérieur appelé jqueryui1.7. L'archive doit ensuite être extraite dans le dossier jqueryui1.7.
Cette archive contiendra tout ce dont nous avons besoin pour commencer : des versions minifiées et non compressées de tous les fichiers de bibliothèque, certains fichiers de thème (le thème par défaut est le bien nommé smoothness) et même la dernière version de la bibliothèque jQuery sous-jacente.
La barre de progression s'appuie sur un certain nombre de fichiers pour fonctionner ; ceux-ci sont répertoriés ci-dessous dans l'ordre dans lequel ils ont été ajoutés à notre page :
Les trois premiers fichiers font partie du framework CSS étendu et sont utilisés pour donner à la barre de progression un aspect unique. Nous n'avons pas besoin de nous en tenir à ce thème dans une implémentation réelle ; nous disposons de nombreuses options de personnalisation, y compris un grand nombre de thèmes préconfigurés obtenus directement à partir de Themeroller, un thème personnalisé que nous pouvons concevoir nous-mêmes à l'aide de Themeroller, ou même un thème personnalisé. nous pouvons personnaliser en remplaçant la feuille de style par défaut. Thèmes personnalisés créés manuellement avec des règles définies. Cependant, nous ne ferons aucune de ces choses dans ce didacticiel, mais nous pouvons profiter de certaines des classes fournies par le framework.
Ce widget nécessite très peu de balisage sous-jacent ; en plus des ressources de bibliothèque répertoriées ci-dessus, tout ce dont nous avons besoin est un simple élément conteneur. Dans un éditeur de texte, créez le shell de page suivant avec les ressources et éléments de conteneur requis :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <link rel="stylesheet" type="text/css" href="jqueryui1.7/development-bundle/themes/smoothness/ui.core.css"> <link rel="stylesheet" type="text/css" href="jqueryui1.7/development-bundle/themes/smoothness/ui.theme.css"> <link rel="stylesheet" type="text/css" href="jqueryui1.7/development-bundle/themes/smoothness/ui.progressbar.css"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>jQuery UI Progress Bar</title> </head> <body> <div id="container"></div> <script type="text/javascript" src="jqueryui1.7/development-bundle/jquery-1.3.2.js"></script> <script type="text/javascript" src="jqueryui1.7/development-bundle/ui/ui.core.js"></script> <script type="text/javascript" src="jqueryui1.7/development-bundle/ui/ui.progressbar.js"></script> <script type="text/javascript"> </script> </body> </html>
Enregistrez-le sous ProgressBar.html dans le répertoire racine de jQuery UI. Nous mettons la feuille de style au début du fichier et le script à la fin ; ceci pour des raisons de performances car ils chargeront le contenu plus rapidement lorsque la page essaie de charger JavaScript à des moments différents. Il s’agit d’une pratique de performance bien documentée qu’il est préférable de suivre. Nous avons laissé une balise de script vide en bas de la page ; ajoutons ensuite du code :
$(function() { //call progress bar constructor $("#container").progressbar(); });
Pour initialiser la barre de progression par défaut, tout ce que nous faisons est d'appeler son constructeur progressbar sur l'élément conteneur vers lequel le widget sera rendu. Lorsque vous exécutez cette page dans votre navigateur, vous devriez voir la barre de progression créée et remplissant automatiquement la largeur de son conteneur, qui dans ce cas est le corps de la page :
La valeur de la barre de progression est définie sur zéro par défaut, c'est pourquoi elle apparaît vide dans la capture d'écran précédente. Afin de remplir la barre de progression, nous devons définir l'attribut value ; changer le constructeur pour qu'il se lise comme ceci :
//call progress bar constructor $("#container").progressbar({ value: 50 });
L'attribut value détermine le pourcentage de la barre de progression qui est remplie, fournissant aux visiteurs un bon retour visuel sur la quantité de tâche restant à accomplir. La barre de progression devrait maintenant être à moitié pleine, comme le montre la capture d'écran ci-dessous :
Obtenir la valeur actuelle d'un widget est aussi simple que de le définir ; nous pouvons utiliser l'une de ses méthodes pour renvoyer la propriété de valeur actuelle. Après le constructeur initial, ajoutez le code suivant :
//Définir le survol de la souris comme barre de progression
$("#container").mouseover(function() { //display the current value $("<p>").attr("id", "percentage").text($("#container").progressbar("option", "value") + "% complete").appendTo("body"); }); //set mouseout for progress bar $("#container").mouseout(function() { //hide value $("#percentage").remove(); });
Nous avons ajouté deux fonctions anonymes simples qui se déclenchent lors des événements de survol et de sortie de souris déclenchés par la barre de progression (notez qu'il s'agit d'événements DOM standard et non d'événements de barre de progression personnalisés). Tout ce que nous faisons dans la première fonction est de créer un nouveau paragraphe avec la valeur actuelle de la barre de progression comme texte intérieur et de l'ajouter à la page.
Utilisez la méthode option pour récupérer la valeur. Le paramètre passé à cette méthode est le nom de la propriété que nous souhaitons récupérer. La deuxième fonction supprime simplement à nouveau le message. Le message est affiché dans la capture d'écran ci-dessous :
value 属性或选项是当前进度条唯一可配置的属性;在此示例中,我们在初始化小部件时通过将其作为配置对象的属性传递来设置它。要在小部件初始化后设置此属性,我们将使用 option 方法。要在 setter 模式下使用此方法,我们需要传入第二个参数来指定新值,如下所示:
progressbar("option", "value", 75)
您可能想知道为什么我说“第二个参数”,而上面的代码行显然有三个参数。尽管我们使用了 option 方法,但我们实际上并没有直接调用它。相反,我们再次调用构造函数方法,但告诉它我们要调用选项方法。小部件将在内部调用该方法,并传入我们在方法名称之后传递给构造函数的两个参数(“value”和 75)。
进度条公开了一个事件,即更改事件,它为我们提供了一种挂钩机制,以便我们可以响应其值的变化。这是一个自定义事件,因此我们可以通过两种不同的方式检测它并对其做出反应。我们可以定义一个匿名函数作为配置对象中change属性的值,就像我们对value属性所做的那样,或者我们可以使用jQuery的bind方法来指定要执行的匿名函数。两者之间的一个细微差别是,使用bind方法指定的代码将首先执行。
进度条API公开了五个方法,如下所示:
所有这些方法的使用方式与我们所了解的选项方法完全相同;通过调用构造函数方法,指定方法的名称和我们想要传递的任何参数。其中大多数应该是不言自明的。
对于那些以前可能根本没有使用过 jQuery UI 的人来说,到目前为止这个示例非常基础。让我们稍微进步一点,将一些接近我们可能想要在正确的实现中做的事情放在一起。这个例子也很基础,但它应该可以让我们更好地了解如何使该小部件为我们工作。我们完成的页面将如下所示:
在文本编辑器的新文件中从以下基础页面开始:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <link rel="stylesheet" type="text/css" href="jqueryui1.7/development-bundle/themes/smoothness/ui.core.css"> <link rel="stylesheet" type="text/css" href="jqueryui1.7/development-bundle/themes/smoothness/ui.theme.css"> <link rel="stylesheet" type="text/css" href="jqueryui1.7/development-bundle/themes/smoothness/ui.progressbar.css"> <link rel="stylesheet" type="text/css" href="regForm.css"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>jQuery UI Progress Bar</title> </head> <body> <div class="form-container ui-helper-clearfix ui-corner-all"> <h1>Registration Form</h1> <p>Progress:</p> <div id="progress"></div><label id="amount">0%</label> <form action="serverScript.php"> <div id="panel1" class="form-panel"> <h2>Personal Details</h2> <fieldset class="ui-corner-all"> <label>Name:</label><input type="text"> <label>D.O.B:</label><input type="text"> <label>Choose password:</label><input type="password"> <label>Confirm password:</label><input type="password"> </fieldset> </div> <div id="panel2" class="form-panel ui-helper-hidden"> <h2>Contact Details</h2> <fieldset class="ui-corner-all"> <label>Email:</label><input type="text"> <label>Telephone:</label><input type="text"> <label>Address:</label><textarea rows="3" cols="25"></textarea> </fieldset> </div> <div id="thanks" class="form-panel ui-helper-hidden"> <h2>Registration Complete</h2> <fieldset class="ui-corner-all"> <p>Thanks for registering!</p> </fieldset> </div> <button id="next">Next ></button><button id="back" disabled="disabled">< Back</button> </form> </div> <script type="text/javascript" src="jqueryui1.7/development-bundle/jquery-1.3.2.js"></script> <script type="text/javascript" src="jqueryui1.7/development-bundle/ui/ui.core.js"></script> <script type="text/javascript" src="jqueryui1.7/development-bundle/ui/ui.progressbar.js"></script> <script type="text/javascript">
将其另存为 jQuery UI 文件夹中的 regForm.html。在页面顶部,我们链接到 CSS 框架;这主要是为了添加进度条所需的样式,但我们也可以在我们自己的元素上使用它提供的一些类。我们还添加了一个即将创建的自定义样式表。
页面的主体包含一些布局元素和一些文本节点,但主要元素是进度条和表单的容器。使用 div 和 fieldset 元素将表单分为几个不同的部分。这样做的原因是我们可以隐藏部分表单,使其看起来好像跨越多个页面。
我们在进度栏旁边添加了一个段落和一个标签,我们将放置它们,以便它们出现在进度栏内。该段落包含一个简单的文本字符串。该标签将用于显示当前进度值。
外部容器被赋予几个类名;第一个是我们可以对元素应用一些自定义样式,但第二个是针对 CSS 框架的不同功能。 ui-helper-clearfix 类用于自动清除浮动元素,是减少额外和不必要的 div 元素混乱的好方法。
ui-corner-all 类用于使用多种专有样式规则为容器元素(以及自动具有它们的进度条本身和我们的字段集元素)提供圆角。这些仅受基于 gecko 和 webkit 的浏览器支持,但就渐进增强的本质而言,使用它们是完全可以接受的。渐进增强意味着我们可以在网页上为能够显示它的浏览器提供增强的样式。其他浏览器只有一个方角容器。
我们在表单中使用 CSS 框架中的另一个类;页面首次加载时需要隐藏多个面板,因此我们可以使用 ui-helper-hidden 类来确保将它们设置为 display:none,当我们想要显示它们时,我们所要做的就是删除这个类名。
在正文的底部(出于性能原因;顺便说一下,这确实有效!)我们链接到库中所需的 JavaScript 资源。最后一个脚本元素是空的,正在等待使表单和进度条栩栩如生的代码。接下来我们添加一下:
$(function() { //call progress bar constructor $("#progress").progressbar({ change: function() { //update amount label when value changes $("#amount").text($("#progress").progressbar("option", "value") + "%"); } }); //set click handler for next button $("#next").click(function(e) { //stop form submission e.preventDefault(); //look at each panel $(".form-panel").each(function() { //if it's not the first panel enable the back button ($(this).attr("id") != "panel1") ? null : $("#back").attr("disabled", ""); //if the panel is visible fade it out ($(this).hasClass("ui-helper-hidden")) ? null : $(this).fadeOut("fast", function() { //add hidden class and show the next panel $(this).addClass("ui-helper-hidden").next().fadeIn("fast", function() { //if it's the last panel disable the next button ($(this).attr("id") != "thanks") ? null : $("#next").attr("disabled", "disabled"); //remove hidden class from new panel $(this).removeClass("ui-helper-hidden"); //update progress bar $("#progress").progressbar("option", "value", $("#progress").progressbar("option", "value") + 50); }); }); }); }); });
在外部 document.ready 快捷方式中,我们有进度条的构造函数;我们向构造函数传递一个包含单个属性的文字配置对象。这是更改属性,允许我们提供一个匿名函数,以便在每次检测到自定义更改事件时执行。我们可以使用此事件来更新要放置在进度条内的标签。
每次触发事件时,我们都会使用 option 方法获取进度条的当前值,并将该值设置为标签的文本。该事件在更改发生后触发,因此我们获得的值将始终是新值。
接下来我们有一个用于 next> 按钮的点击处理程序;单击此按钮时,将导致表单的当前“页面”通过一系列动画发生变化,并且进度条的值也会更新。我们还需要做一些其他的事情。表单内按钮的默认行为是提交表单,我们不想在这个阶段执行此操作,因此单击处理程序要做的第一件事就是使用 PreventDefault() JavaScript 函数阻止表单提交。这是在事件对象上调用的,该事件对象会自动传递给匿名函数。
然后,我们查看表单中的每个单独面板以确定当前面板;我们要做的第一件事是检查当前面板是否不是第一个面板,如果不是,我们启用默认情况下禁用的后退按钮。一次只会显示一个面板,因此我们找到没有 ui-helper-hidden 类的面板并将其淡出。我们指定一个匿名回调函数,在淡入淡出完成后执行。
在第二个函数中,我们选择下一个元素并显示它;如果下一个元素是最终面板,其 id 为Thanks,我们禁用 next> 按钮。尽管在此示例中我们并不担心表单的实际提交,但我们可以在这里将从表单收集的数据发送到服务器。我们删除了 ui-helper-hidden 类,因为面板现在可见。
最后,我们再次使用 option 方法,这次是在 setter 模式下,来设置进度条的新值。我们作为第二个参数传递给该方法的新值只是当前值加上 50,因为表单只有 2 个部分。最后一部分将触发更新标签的函数。
接下来,我们需要为
这就是我们现在需要的所有代码,我们现在要做的就是添加一些基本的 CSS 来布置示例;在文本编辑器的新文件中添加以下代码:
将其另存为 regForm.css,与 HTML 文件位于同一文件夹中。我们现在应该有一个带有有线进度条的工作页面。当我们运行该页面时,我们应该发现我们可以浏览表单的每个面板,并且进度条将相应地自行更新:
在本文中,我们研究了极其有用的进度条,我们可以将其用作视觉辅助工具,以百分比方式告诉访问者完成指定过程需要多长时间。它以一种吸引人且有用的信息呈现方式,让我们的访问者能够轻松理解。
我们查看了其 API 公开的属性和事件,还查看了可以调用以使进度栏执行某些操作的方法之一。我们结束的示例应该可以在所有主要浏览器中完美运行,尽管它在良好的 IE 中看起来确实有点混乱(如果我们愿意这样做,这将很容易修复)。
//set click handler for back button
$("#back").click(function(e) {
//stop form submission
e.preventDefault();
//look at each panel
$(".form-panel").each(function() {
//if it's not the last panel enable the next button
($(this).attr("id") != "thanks") ? null : $("#next").attr("disabled", "");
//if the panel is visible fade it out
($(this).hasClass("ui-helper-hidden")) ? null : $(this).fadeOut("fast", function() {
//add hidden class and show the next panel
$(this).addClass("ui-helper-hidden").prev().fadeIn("fast", function() {
//if it's the first panel disable the back button
($(this).attr("id") != "panel1") ? null : $("#back").attr("disabled", "disabled");
//remove hidden class from new panel
$(this).removeClass("ui-helper-hidden");
//update progress bar
$("#progress").progressbar("option", "value", $("#progress").progressbar("option", "value") - 50);
});
});
});
});
h1, h2 { font-family:Georgia; font-size:140%; margin-top:0; }
h2 { font-size:100%; margin:20px 0 10px; text-align:left; }
.form-container {
width:400px; margin:0 auto; position:relative; font-family:Verdana;
font-size:80%; padding:20px; background-color:#e0e3e2;
border:3px solid #abadac;
}
.form-panel { width:400px; height:241px; }
.form-panel fieldset {
width:397px; height:170px; margin:0 auto; padding:22px 0 0;
border:1px solid #abadac; background-color:#ffffff;
}
.form-panel label {
width:146px; display:block; float:left; text-align:right;
padding-top:2px; margin-right:10px;
}
.form-panel input, .form-panel textarea {
float:left; width:200px; margin-bottom:13px;
}
.form-container button { float:right; }
p {
margin:0; font-size:75%; position:absolute; left:30px; top:60px;
font-weight:bold;
}
#amount {
position:absolute; right:30px; top:60px; font-size:80%;
font-weight:bold;
}
#thanks { text-align:center; }
#thanks p {
margin-top:48px; font-size:160%; position:relative; left:0; top:0;
}
摘要
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!