在移动开发领域,快速构建美观且功能丰富的用户界面是提升应用体验的关键。微信官方推出的WEUI库为此提供了强大的支持,它专为微信网页和小程序设计,旨在提供一致的视觉和交互体验。本文将深入探讨如何利用WEUI快速搭建一个响应式新闻列表页面,同时强调无障碍设计的重要性。
引言
WEUI是一套高质量的前端UI库,它遵循微信的设计规范,能够帮助开发者迅速实现与微信原生应用风格一致的界面效果。本文将以新闻列表页为例,从组件选择、代码实现、事件处理、以及无障碍设计等方面进行详细阐述。
这里是weui压缩版本的网址"cdn.bootcdn.net/ajax/libs/w…" 我们用
link
引入该css
样式
组件选择与布局
新闻列表页通常包含导航栏(Tabbar/Navbar)、搜索栏(Searchbar)和新闻列表(List)三大核心组件。在WEUI中,这些组件都已封装好,只需通过相应的类名引入即可:
<!-- navbar -->
<!-- .weui-navbar>a.weui-navbar__item*3 -->
<div class="weui-navbar">
<a href="#" class="weui-navbar__item weui-bar__item_on">推荐</a>
<a href="#" class="weui-navbar__item ">热点</a>
<a href="#" class="weui-navbar__item ">娱乐</a>
</div>
<!-- searchbar -->
<div class="weui-search-bar" id="search_bar">
<form class="weui-search-bar__form">
<div class="weui-search-bar__box">
<i class="weui-icon-search"></i>
<input type="search"
placeholder="搜索"
id="search_input"
class="weui-search-bar__input">
<a href="#" class="weui-icon-clear"></a>
</div>
<label id="search_text" for="search_input" class="weui-search-bar__label">
<i class="weui-icon-search"></i>
<span>搜索</span>
</label>
</form>
<a href="#" class="weui-search-bar__cancel-btn">取消</a>
</div>
- 导航栏:使用
.weui-navbar
和.weui-navbar__item
定义,其中.weui-bar__item_on
类标识当前激活的选项。 - 搜索栏:
.weui-search-bar
提供了搜索框、清除按钮和取消按钮的完整结构,通过JavaScript控制搜索状态的切换。
代码实现细节
-
资源引用:通过CDN引入
weui.min.css
,确保快速加载和跨平台兼容性。此操作不仅提升了HTTP传输效率,也方便开发阶段的源码阅读和调试。<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>weui 新闻列表</title> <link href="https://cdn.bootcdn.net/ajax/libs/weui/2.6.12/style/weui.min.css" rel="stylesheet"> </head>
-
事件监听与作用域处理:在处理导航栏的Tab切换时,通过事件委托的方式在
.weui-navbar__item
上监听click
事件,ES5中可以利用闭包解决循环中事件监听器的索引问题。ES6的let
关键字在每次循环中创建独立的作用域,避免了变量覆盖的问题。es5:
const tabs =document.querySelectorAll('.weui-navbar__item') for (var i=0; i<tabs.length; i++){ (function(){ tabs[i].addEventListener('click', function(){ console.log(i) }) })(i) }
es6
const tabs =document.querySelectorAll('.weui-navbar__item') for (let i=0; i<tabs.length; i++){ tabs[i].addEventListener('click', function(){ console.log(i) }) }
-
优化内存:在处理导航栏的Tab切换时,可以通过事件委托的方式在
.weui-navbar
上监听click
事件进行内存优化,减少内存的使用const navbar =document.querySelector('.weui-navbar') navbar.addEventListener('click', function(event){ // console.log(event.target) const target = event.target if(target.nodeName == 'A'){ event.preventDefault(); if (target.classList.contains('weui-bar__item_on')) { return; } document .querySelector('.weui-bar__item_on') .classList .remove('weui-bar__item_on') target.classList.add('weui-bar__item_on') } });
-
无障碍设计:WEUI设计考虑到了无障碍浏览的需求,在搜索栏中,通过
<label>
元素的for
属性与输入框的id
关联,确保屏幕阅读器能够正确识别和读出输入框的功能,即使输入框被视觉上隐藏,也可通过添加特定类(如.weui-search-bar_focusing
)使其对辅助技术可见。const searchInput =document.querySelector('#search_input') const searchBar = document.querySelector('.weui-search-bar') document .querySelector('.weui-search-bar__label') .addEventListener('click', function() { searchBar.classList.add('weui-search-bar_focusing') }) searchInput.addEventListener('focus', function(event) { console.log('聚焦了') })
页面展示
这里拉出我们的设计的页面来看看实际成果
下面这两张图体现的是导航栏的Tab切换时的样子
"
下面这两张图体现的是无障碍浏览
全部代码展示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>weui 新闻列表</title>
<link href="https://cdn.bootcdn.net/ajax/libs/weui/2.6.12/style/weui.min.css" rel="stylesheet">
</head>
<body>
<!-- navbar -->
<!-- .weui-navbar>a.weui-navbar__item*3 -->
<div class="weui-navbar">
<a href="#" class="weui-navbar__item ">推荐</a>
<a href="#" class="weui-navbar__item weui-bar__item_on">热点</a>
<a href="#" class="weui-navbar__item ">娱乐</a>
</div>
<!-- searchbar -->
<!-- .weui-search-bar#search_bar -->
<div class="weui-search-bar" id="search_bar">
<form class="weui-search-bar__form">
<div class="weui-search-bar__box">
<i class="weui-icon-search"></i>
<input type="search" placeholder="搜索" id="search_input" class="weui-search-bar__input">
<a href="#" class="weui-icon-clear"></a>
</div>
<label id="search_text" for="search_input" class="weui-search-bar__label">
<i class="weui-icon-search"></i>
<span>搜索</span>
</label>
</form>
<a href="#" class="weui-search-bar__cancel-btn">取消</a>
</div>
<!-- news-list -->
<script>
const tabs =document.querySelectorAll('.weui-navbar__item')
const navbar =document.querySelector('.weui-navbar')
const searchInput =document.querySelector('#search_input')
const searchBar = document.querySelector('.weui-search-bar')
document
.querySelector('.weui-search-bar__label')
.addEventListener('click', function() {
searchBar.classList.add('weui-search-bar_focusing')
})
searchInput.addEventListener('focus', function(event) {
console.log('聚焦了')
})
// 优化了内存
navbar.addEventListener('click', function(event){
// console.log(event.target)
const target = event.target
if(target.nodeName == 'A'){
event.preventDefault();
if (target.classList.contains('weui-bar__item_on')) {
return;
}
document
.querySelector('.weui-bar__item_on')
.classList
.remove('weui-bar__item_on')
target.classList.add('weui-bar__item_on')
}
});
//同步代码
// for (var i=0; i<tabs.length; i++){
// // 异步的代码
// // 使用闭包
// (function(){
// tabs[i].addEventListener('click', function(){
// console.log(i)
// })
// })(i)
// for (let i=0; i<tabs.length; i++){
// if( this.classList.contains('weui-bar__item_on')){
// return;
// }
// // 异步的代码
// tabs[i].addEventListener('click', function(){
// // console.log(i)
// document
// .querySelector('.weui-bar__item_on')
// .classList
// .remove('weui-bar__item_on')
// this.classList.add('weui-bar__item_on')
// })
// }
</script>
</body>
</html>
总结
通过本实践,我们不仅快速搭建了一个具有导航、搜索功能的新闻列表页面,还深刻体会到了WEUI组件库的便捷性和高效性。更重要的是,我们意识到了在现代Web开发中,无障碍设计不应是附加选项,而应当作为设计和开发的基本原则之一。WEUI在这方面做得尤为出色,其组件设计充分考虑了包括盲人在内的所有用户的使用体验,体现了产品设计的人文关怀。利用WEUI快速搭建新闻列表页不仅是一个技术实践过程,也是对用户体验和包容性设计的一次深入探索。随着移动互联网的持续发展,遵循这样的设计理念,将帮助我们构建更加友好、包容的数字世界。