搜索列表(一)-搜索列表的基本布局

商品列表布局

  • 商品列表页搜索条
<div class="search">
  <div class="search-input">
    <icon type="search" size="16" color="#999"/>
    {{keyword}}
  </div>
</div>
  • 商品列表Tab布局
<div class="tabs">
  <div @click='tabHandle(index)' :class='{active: currentIndex === index}' :key='index' v-for='(item, index) in tabNames' class="tab-item">
    {{item}}
  </div>
</div>

商品列表展示

  • 列表基本布局
<div class="goods-list">
  <img :src="item.goods_small_logo" mode="aspectFill"/>
  <div class="goods-right">
    <h4>
      {{item.goods_name}}
    </h4>
    <div class="price">
      <span></span>{{item.goods_price}}
    </div>
  </div>
</div>
  • 列表数据加载
// 根据关键字加载匹配的商品列表数据
async loadData () {
  // 获取列表数据
  let res = await request('goods/search', {
    query: this.kw,
    pagenum: this.pagenum,
    pagesize: this.pagesize
  })
  this.list = res.goods
  this.total = res.total
}
实例

第一步:在search_list文件夹下,新建main.less文件

.search {
  padding: 20rpx;
  background: #eee;
  .search-input {
    padding: 0 20rpx;
    background: #fff;
    border-radius: 4px;
    height: 60rpx;
    font-size: 16px;
    display: flex;
    align-items: center;
    color: #999;
    icon {
      margin-right: 5px;
    }
  }
}

.tabs {
  display: flex;
  width: 100%;
  justify-content: space-around;
  border-bottom: 1px #eee solid;
  .tab-item {
    padding: 20rpx 0;
      //& ——指代父级元素
    &.active {
      color: red;
    }
  }
}

.goods-list {
  padding: 0 20rpx;
  .goods-item {
    display: flex;
    justify-content: space-between;
    padding: 20rpx 0;
    border-bottom: 1px #eee solid;
    img {
      width: 200rpx;
      height: 200rpx;
      display: block;
      margin-right: 20rpx;
      flex-shrink: 0;
    }
    .goods-right {
      flex: 1;
      display: flex;
      flex-direction: column;
      justify-content: space-between;
      h4 {
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 2;
        overflow: hidden;
      }
    }
    .price {
      color: red;
      font-size: 18px;
      span {
        font-size: 14px;
      }
    }
  }
}

.more {
  padding: 20rpx;
  text-align: center;
  color: #999;
  font-size: 14px;
}

第二步:在search_list文件夹下的index.vue中进行导入样式

<style scoped lang="less">
  @import './main.less';
</style>

第三步:基本结构布局

<template>
  <div>
    <!-- 顶部搜索栏 -->
    <div class="search">
      <div class="search-input">
        <icon type="search" size="16" color="#999"/>
        {{kw}}
      </div>
    </div>
  </div>
</template>
<script>
export default {
  data () {
    return {
      kw: '',
      tabData: ['综合', '销量', '价格'],
    }
  }
}
</script>

点击关键字历史记录小米,列表页展示

在这里插入图片描述

tab栏展示

第一步:定义tab栏title数据

export default {
  data () {
    return {
      kw: '',
        //tab栏数据
      tabData: ['综合', '销量', '价格'],
    }
  }
}
</script>

第二步:tab栏结构

 <!-- 筛选条件栏分类 -->
    <div class="tabs" @click='handleChange'>
      <div :data-index='index' :class="['tab-item', {active: currentIndex===index}]" :key='index' v-for='(item, index) in tabData'>{{item}}</div>
    </div>

第三步:默认展示第一个

初始数据为0

export default {
  data () {
    return {
      kw: '',
        //tab栏数据
      tabData: ['综合', '销量', '价格'],
      currentIndex: 0,
    }
  }
}

默认显示第一条

在这里插入图片描述

第四步:实现tab选项切换,给父级绑定事件 @click='handleChange'

 <!-- 筛选条件栏分类 -->
    <div class="tabs" @click='handleChange'>
      <div :data-index='index' :class="['tab-item', {active: currentIndex===index}]" :key='index' v-for='(item, index) in tabData'>{{item}}</div>
    </div>

第五步:处理方法

methods:{
    handleChange (e) {
      // 控制选项卡切换
      this.currentIndex = e.target.dataset.index
    }    
}

第六步:实现tab栏测试

在这里插入图片描述

### 回答1: 在Godot中创建可搜索列表控件可以通过以下步骤完成: 1. 创建一个新场景并添加一个 Control 节点作为根节点。 2. 在 Control 节点下添加一个 LineEdit 节点,用于输入搜索关键字。 3. 添加一个 ScrollContainer 节点,用于显示列表。将其位置设置在 LineEdit 下面,使得 LineEdit 和 ScrollContainer 垂直排列。 4. 在 ScrollContainer 节点下添加一个 VBoxContainer 节点,用于包含列表项。 5. 在 VBoxContainer 下添加一个 Button 节点,并设置其样式为列表项的样式。 6. 复制 Button 节点,并将其添加到 VBoxContainer 中,直到列表中包含足够的项。 7. 编写一个函数来过滤列表项,根据搜索关键字隐藏或显示项。可以将该函数添加到 LineEdit 的 text_changed 信号中,使得每次输入关键字时都会调用该函数。 以下是一个简单的示例代码: ``` extends Control onready var search_box = $LineEdit onready var list_container = $ScrollContainer/VBoxContainer func _ready(): # 添加列表项 for i in range(20): var btn = Button.new() btn.text = "Item " + str(i) list_container.add_child(btn) # 将搜索框的 text_changed 信号连接到过滤函数 search_box.connect("text_changed", self, "filter_items") func filter_items(keyword): for child in list_container.get_children(): # 如果关键字不在文本中,则隐藏该项 if keyword not in child.text: child.hide() else: child.show() ``` 这样,当用户输入关键字时,列表将根据搜索结果显示或隐藏项。 ### 回答2: 在Godot中创建一个可搜索列表控件可以按照以下步骤进行: 1. 创建一个新的场景并命名为"SearchableList"。在场景中添加一个搜索框(LineEdit)和一个项目列表(ItemList)。 2. 为LineEdit控件创建一个输入文本改变的信号回调函数。这个函数将在用户输入时触发。 ```gd func _on_LineEdit_text_changed(new_text): # 清空项目列表 $ItemList.clear() # 获取用户输入的文本 var search_text = new_text.lowercase() # 遍历所有项目 for item in $ItemList.items: # 获取项目名称 var item_name = item.get_text(0).lowercase() # 如果项目名称包含搜索文本,则添加到列表中 if item_name.find(search_text) != -1: $ItemList.add_item(item) ``` 3. 在Godot编辑器中为ItemList控件添加项目。可以通过“添加项”按钮手动添加或使用GDScript来动态添加项目。 ```gd # 动态添加项目示例 func add_item(name, description): var item = ItemList.new_item() item.set_text(0, name) item.set_metadata(0, description) ItemList.add_item(item) ``` 4. 可以在搜索时根据项目名称或其他元数据来筛选出符合条件的项目。根据需求来修改搜索算法。 5. 运行场景,并通过输入文本来搜索项目。搜索结果将会自动更新到列表中。 以上就是创建一个可搜索列表控件的基本步骤。根据具体需求,可以进一步扩展功能,如添加排序、过滤等。祝您使用Godot开发愉快! ### 回答3: 要使用Godot创建可搜索列表控件,你可以按照以下步骤进行: 1. 创建一个ListContainer或者Tree节点作为列表的父节点。这将作为列表项的容器。 2. 在该节点下创建一个ScrollContainer节点,用于实现列表的滚动功能。 3. 在ScrollContainer节点下创建一个VBoxContainer节点,用于垂直布局。 4. 在VBoxContainer节点下创建一个LineEdit节点作为搜索框。 5. 创建一个Array或者Dictionary来保存列表中的数据。 6. 在脚本中,根据用户的输入过滤数据,并更新列表。 7. 创建一个函数来动态生成列表项。可以使用一个循环来遍历过滤后的数据,并为每个数据项创建一个Button节点作为列表项按钮。 8. 在列表项按钮的点击事件中,可以添加对应的逻辑处理。 9. 如果需要,可以为列表项按钮添加样式或布局。 10. 运行游戏,即可看到带有搜索功能的列表控件。 总结起来,创建一个可搜索列表控件可以通过以下步骤实现:创建列表容器,添加滚动功能,添加垂直布局,创建搜索框,设置数据和过滤逻辑,生成和设置列表项按钮,添加对应的逻辑处理,最后运行游戏即可。这样的列表控件可以让用户通过搜索输入在列表中快速查找和选择项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值