微信小程序实现高亮效果

大体思路:
根据要搜索的关键字,将现有的字符串切割成多分,存放在某个数组中;前台显示时候通过,循环数据绑定,循环输出这些被切割的字符串。

数据结构

js代码:

sCallback: function (res) {//ajax回调函数
if (res.code == 1) {
var list = res.data.list;
//实现高亮
for (var i = 0; i < list.length; i++) {
var oldTitle = list[i].title;
var titleLight = [];
if (keywords){//如果有搜索关键字
//调用高亮函数
titleLight = that.light(keywords, oldTitle, titleLight);
} else {//如果没有搜索关键字
titleLight.push({ key: false, word: oldTitle });
}
list[i].titleLight = titleLight;
}
res.data.list = list;
//实现高亮结束
callback && callback(res.data);
}

/*
* 高亮封装
* key 是关键字
* word 是要检索的字符串
* new_arry 接收截取的字符串
*/
light(key, word, new_arry){
var index = word.indexOf(key);
if (index > -1){
var part_before = word.slice(0, index);//截取 关键字前面部分 字符串
var part_after = word.slice(index + key.length, );//截取 关键字后面部分 字符串
new_arry.push({ key: false, word: part_before });
new_arry.push({ key: true, word: key });
if (part_after.indexOf(key) > -1) {//如果关键字后面部分 字符串 还存在 关键字key,利用递归在继续查询
this.light(key, part_after, new_arry);
} else {//否则 将关键字后面部分 字符串压入数组
new_arry.push({ key: false, word: part_after });
}
}
return new_arry;
}

小程序代码:

 <block wx:for="{{item.titleLight}}" wx:for-item="item_word">
    <text class="{{item_word.key ? 'select_title_left_top_remark' :''}}">{{item_word.word}}</text>
 </block>
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现点击切换高亮效果,可以使用以下步骤: 1. 给需要点击的元素绑定 tap 事件。 2. 在 tap 事件处理函数中,通过获取当前元素的 data-* 属性值,来判断当前元素是否已经被高亮。 3. 如果当前元素没有被高亮,就给它添加一个高亮的 class。如果当前元素已经被高亮,就把它的高亮 class 移除。 下面是一个简单的示例代码: wxml: ``` <view class="item" data-active="{{active}}" data-index="{{index}}" bindtap="onTap"> {{item}} </view> ``` css: ``` .item { height: 50px; line-height: 50px; text-align: center; background-color: #fff; border: 1px solid #ddd; } .item.active { background-color: #f00; color: #fff; } ``` js: ``` Page({ data: { list: ['item1', 'item2', 'item3'], activeIndex: -1 }, onTap: function(e) { var index = e.currentTarget.dataset.index; var active = e.currentTarget.dataset.active; if (!active) { this.setData({ activeIndex: index }); } else { this.setData({ activeIndex: -1 }); } } }) ``` 在上面的示例代码中,我们给每一个需要点击的元素设置了两个 data-* 属性,一个是 data-active 表示当前元素是否被高亮,另一个是 data-index 表示当前元素的索引。在 tap 事件处理函数中,我们先通过 e.currentTarget.dataset.index 获取当前元素的索引,然后再通过 e.currentTarget.dataset.active 判断当前元素是否已经被高亮。如果当前元素没有被高亮,就给它添加一个 active 的 class,否则就移除它的 active class。最后,我们使用 this.setData() 方法更新 activeIndex 的值,从而触发页面的重新渲染。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值