当前位置:首页 > JavaScript

js实现layui

2026-01-31 23:20:09JavaScript

使用原生JavaScript实现类似LayUI的功能

LayUI是一个经典的前端UI框架,以下通过原生JavaScript模拟其核心功能(如弹层、表单验证等),避免依赖库的使用。

弹层组件实现

创建基础弹层结构,通过CSS控制显示/隐藏:

function showLayer(options) {
  const { title = '提示', content = '', btn = ['确定'] } = options;
  const layerHTML = `
    <div class="layer-mask">
      <div class="layer-box">
        <div class="layer-title">${title}</div>
        <div class="layer-content">${content}</div>
        <div class="layer-footer">
          ${btn.map(text => `<button>${text}</button>`).join('')}
        </div>
      </div>
    </div>
  `;
  document.body.insertAdjacentHTML('beforeend', layerHTML);
}

// 调用示例
showLayer({
  content: '这是一个模拟弹层',
  btn: ['确认', '取消']
});

CSS样式需单独定义:

.layer-mask {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: rgba(0,0,0,0.5);
  z-index: 999;
}
.layer-box {
  width: 300px;
  background: white;
  border-radius: 4px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

表单验证模块

实现基础的非空验证和格式校验:

const formValidator = {
  rules: {
    required: value => value.trim() !== '',
    email: value => /^\w+@[a-z0-9]+\.[a-z]+$/i.test(value)
  },

  validate(formEl) {
    const inputs = formEl.querySelectorAll('[data-validate]');
    let isValid = true;

    inputs.forEach(input => {
      const rules = input.dataset.validate.split('|');
      for (let rule of rules) {
        if (!this.rules[rule](input.value)) {
          input.style.borderColor = 'red';
          isValid = false;
          break;
        }
      }
    });

    return isValid;
  }
};

// 使用示例
document.querySelector('form').addEventListener('submit', function(e) {
  e.preventDefault();
  if (formValidator.validate(this)) {
    // 提交逻辑
  }
});

HTML结构对应:

<input type="text" data-validate="required|email">

动态表格渲染

实现数据驱动表格渲染:

js实现layui

function renderTable(data, container) {
  const headers = Object.keys(data[0]);
  const headerHTML = `<tr>${headers.map(h => `<th>${h}</th>`).join('')}</tr>`;
  const bodyHTML = data.map(item => 
    `<tr>${headers.map(h => `<td>${item[h]}</td>`).join('')}</tr>`
  ).join('');

  container.innerHTML = `
    <table class="demo-table">
      <thead>${headerHTML}</thead>
      <tbody>${bodyHTML}</tbody>
    </table>
  `;
}

// 调用示例
renderTable([
  { id: 1, name: '张三' },
  { id: 2, name: '李四' }
], document.getElementById('table-container'));

注意事项

  1. CSS样式需要单独维护,建议采用BEM命名规范避免冲突
  2. 事件绑定需注意内存泄漏问题,动态元素建议使用事件委托
  3. 组件化开发可通过Class语法实现更完整的封装
  4. 对于复杂功能(如下拉选择器),需要结合DOM操作和位置计算

以上实现保留了LayUI的核心交互逻辑,但剥离了jQuery依赖,更适合现代Web开发场景。实际项目中可根据需求扩展验证规则、动画效果等模块。

标签: jslayui
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…