jQuery UI 组件

jQuery UI 是基于 jQuery 构建的一组用户界面交互、特效、小部件和主题。它提供了丰富的交互组件,可以大大提升用户体验。

什么是 jQuery UI?

jQuery UI 是一个基于 jQuery 的官方用户界面库,它包含以下主要特性:

  • 交互组件 - 可拖放、可调整大小、可选择等
  • UI 小部件 - 日期选择器、对话框、进度条等
  • 特效 - 丰富的动画和过渡效果
  • 主题 - 可定制的外观主题系统
  • 鼠标交互 - 更好的鼠标事件处理

安装与引入

使用 jQuery UI 需要先引入 jQuery,然后引入 jQuery UI:

基本引入方式

<!-- 引入 jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

<!-- 引入 jQuery UI CSS -->
<link rel="stylesheet" href="https://code.jquery.com/ui/1.13.2/themes/base/jquery-ui.css">

<!-- 引入 jQuery UI JS -->
<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.min.js"></script>

1. 日期选择器 (Datepicker)

Datepicker 允许用户方便地选择日期。

示例演示

基础用法

// 基本日期选择器
$("#datepicker").datepicker();

// 带选项的日期选择器
$("#datepicker").datepicker({
    dateFormat: "yy-mm-dd",
    changeMonth: true,
    changeYear: true,
    yearRange: "c-10:c+10"
});

常用选项

// 完整的选项配置
$("#datepicker").datepicker({
    dateFormat: "yy-mm-dd",          // 日期格式
    showAnim: "fadeIn",              // 显示动画
    showButtonPanel: true,           // 显示按钮面板
    changeMonth: true,               // 可切换月份
    changeYear: true,                // 可切换年份
    yearRange: "1900:2025",          // 年份范围
    minDate: 0,                      // 最小日期(0表示今天)
    maxDate: "+1m +1w",              // 最大日期
    beforeShowDay: function(date) {  // 自定义日期显示
        return [true, ""];
    }
});

2. 对话框 (Dialog)

Dialog 用于创建模态或非模态的对话框窗口。

示例演示

基础用法

<!-- HTML 结构 -->
<div id="dialog" title="对话框标题">
    <p>对话框内容...</p>
</div>

<button id="open-btn">打开对话框</button>
// JavaScript 代码
// 初始化对话框
$("#dialog").dialog({
    autoOpen: false,    // 初始不显示
    modal: true,        // 模态对话框
    width: 400,         // 宽度
    height: 300,        // 高度
    buttons: {
        "确定": function() {
            $(this).dialog("close");
        },
        "取消": function() {
            $(this).dialog("close");
        }
    }
});

// 点击按钮打开对话框
$("#open-btn").click(function() {
    $("#dialog").dialog("open");
});

3. 进度条 (Progressbar)

示例演示

基础用法

<div id="progressbar"></div>
// 初始化进度条
$("#progressbar").progressbar({
    value: 0,           // 初始值
    max: 100            // 最大值
});

// 设置进度值
$("#progressbar").progressbar("value", 50);

// 动画更新进度
var progress = 0;
var interval = setInterval(function() {
    progress += 10;
    $("#progressbar").progressbar("value", progress);
    if (progress >= 100) {
        clearInterval(interval);
    }
}, 500);

4. 滑块 (Slider)

示例演示

滑块值: 50

范围滑块: 20 - 80

基础用法

<div id="slider"></div>
<div id="range-slider"></div>
// 单滑块
$("#slider").slider({
    value: 50,
    min: 0,
    max: 100,
    slide: function(event, ui) {
        $("#slider-value").text(ui.value);
    }
});

// 范围滑块
$("#range-slider").slider({
    range: true,
    min: 0,
    max: 100,
    values: [20, 80],
    slide: function(event, ui) {
        $("#range-values").text(ui.values[0] + " - " + ui.values[1]);
    }
});

5. 选项卡 (Tabs)

示例演示

这是第一个选项卡的内容。

这是第二个选项卡的内容。

这是第三个选项卡的内容。

基础用法

<div id="tabs">
    <ul>
        <li><a href="#tabs-1">选项卡1</a></li>
        <li><a href="#tabs-2">选项卡2</a></li>
    </ul>
    <div id="tabs-1">
        <p>内容1...</p>
    </div>
    <div id="tabs-2">
        <p>内容2...</p>
    </div>
</div>
// 初始化选项卡
$("#tabs").tabs();

// 带选项的选项卡
$("#tabs").tabs({
    active: 0,                  // 默认激活的选项卡
    collapsible: true,          // 可折叠
    heightStyle: "fill",        // 高度样式
    show: { effect: "fade", duration: 400 },
    hide: { effect: "fade", duration: 400 }
});

// 切换到指定选项卡
$("#tabs").tabs("option", "active", 1);

6. 手风琴 (Accordion)

示例演示

第一部分

这是第一部分的内容...

第二部分

这是第二部分的内容...

第三部分

这是第三部分的内容...

基础用法

// 初始化手风琴
$("#accordion").accordion({
    collapsible: true,      // 可折叠所有
    active: false,          // 默认全部折叠
    heightStyle: "content", // 高度适应内容
    animate: 300            // 动画时间
});

// 事件处理
$("#accordion").accordion({
    activate: function(event, ui) {
        console.log("激活的面板:", ui.newHeader.text());
    }
});

7. 自动完成 (Autocomplete)

示例演示

基础用法

// 数据源
var availableTags = [
    "北京", "上海", "广州", "深圳", "杭州",
    "南京", "成都", "重庆", "武汉", "西安"
];

// 初始化自动完成
$("#autocomplete").autocomplete({
    source: availableTags,
    minLength: 1,           // 输入多少个字符开始提示
    delay: 300,             // 延迟时间
    select: function(event, ui) {
        console.log("选择了: " + ui.item.value);
    }
});

// 使用远程数据源
$("#autocomplete").autocomplete({
    source: function(request, response) {
        $.ajax({
            url: "/api/search",
            data: { term: request.term },
            success: function(data) {
                response(data);
            }
        });
    },
    minLength: 2
});

自定义主题

jQuery UI 支持使用 ThemeRoller 创建自定义主题:

主题定制步骤:
  1. 访问 ThemeRoller
  2. 选择或自定义颜色方案
  3. 下载主题包
  4. 替换默认的 jQuery UI CSS 文件

最佳实践

  • 按需加载 - 只引入需要的组件,减少文件大小
  • 主题一致性 - 确保 UI 主题与网站设计一致
  • 响应式设计 - 在小屏幕上测试组件的可用性
  • 性能优化 - 避免在大量元素上使用复杂的 UI 组件
  • 无障碍访问 - 确保组件对辅助技术友好