今天忙里偷闲,分享一个淘宝搜索页实现过程,先上效果图:

界面部分比较简单,大体分为导航栏、历史搜索、猜你想搜和热搜榜几个部分,历史搜索采用用户首选项进行存储数据。

导航栏部分相关代码如下:

Flex({direction:FlexDirection.Row,wrap:FlexWrap.NoWrap,alignItems:ItemAlign.Center}){  Image($r('app.media.back'))    .width(30)    .height(30)    .objectFit(ImageFit.Contain)  Flex({direction:FlexDirection.Row,wrap:FlexWrap.NoWrap,alignItems:ItemAlign.Center}){      TextInput({placeholder:'长款羽绒服',text:this.searchText})        .width('100%')        .placeholderColor(Color.Gray)        .fontSize(14)        .backgroundColor('rgb(226,226,226)')        .enterKeyType(EnterKeyType.Search)        .onChange((str)=>{          this.searchText = str        })        .onSubmit(()=>{          this.saveHistory(this.searchText)          this.searchText = ''        })    Image($r('app.media.scan'))      .width(22)      .height(22)      .margin({left:5})      .constraintSize({minWidth:22})      .objectFit(ImageFit.Contain)    Text('搜索')      .width(60)      .height(28)      .backgroundColor(Color.Orange)      .borderRadius(4)      .fontColor(Color.White)      .textAlign(TextAlign.Center)      .fontSize(12)      .margin({left:5})  }  .padding({left:5,right:5})  .width('100%')  .height(34)  .backgroundColor('rgb(226,226,226)')  .borderRadius(8)  .margin({left:5})}.padding({left:10,right:10}).width('100%').backgroundColor(Color.White).height(45)

历史搜索部分采用Flex布局实现:

Flex({direction:FlexDirection.Row,wrap:FlexWrap.Wrap}){  ForEach(this.hisList,(str:string,index)=>{    Text(str)      .fontColor('#4a4a4a')      .fontSize(12)      .padding({left:6,right:6,top:4,bottom:4})      .borderWidth(1)      .borderColor('rgb(216,216,216)')      .borderStyle(BorderStyle.Solid)      .margin({left:5,top:5})      .textAlign(TextAlign.Center)      .borderRadius(4)  })}

猜你想搜部分,同样使用Flex布局:

Flex({direction:FlexDirection.Row,wrap:FlexWrap.Wrap}){  ForEach(this.guessList,(str:string,index)=>{    Text(str)      .fontColor('#4a4a4a')      .fontSize(15)      .margin({top:6})      .width('50%')  })}

热搜榜部分使用一个Scroll和一个Swiper实现联动效果:

Column(){  Scroll(this.scrollController){    Row({space:30}){      ForEach(this.hotTitleList,(str:string,index)=>{        Text(str)          .fontSize(15)          .fontColor(this.hotIndex == index?Color.Orange:Color.Gray)          .fontWeight(this.hotIndex == index?FontWeight.Bold:FontWeight.Normal)          .onClick(()=>{            this.hotIndex = index            this.swiperController.changeIndex(this.hotIndex,true)          })      })    }    .height(45)    .alignItems(VerticalAlign.Center)  }  .scrollable(ScrollDirection.Horizontal)  .scrollBar(BarState.Off)  .width('100%')  Swiper(this.swiperController){    ForEach(this.hotTitleList,(str:string,index)=>{      Column(){        ForEach(this.hotContentList,(str:string,index)=>{          Row(){            Row(){              Text((index+1).toString())                .fontSize(15)                .fontColor('#4a4a4a')                .fontWeight(FontWeight.Bold)                .width(40)                .textAlign(TextAlign.Center)              Text(str)                .fontSize(15)                .fontColor('#4a4a4a')            }            Text('热度100万')              .fontSize(12)              .fontColor(Color.Gray)          }          .width('100%')          .height(40)          .justifyContent(FlexAlign.SpaceBetween)          .alignItems(VerticalAlign.Center)          .borderRadius(10)          .margin({top:8})          .linearGradient({            angle: 90,            colors: [[index<3?0xfff8f3:0xf9f9f9, 0.0], [index<4?0xfffbfa:0xfcfcfc, 0.4], [0xffffff, 1.0]]          })        })      }      .width('100%')      .alignItems(HorizontalAlign.Start)    })  }  .vertical(false)  .indicator(false)  .loop(false)  .onAnimationEnd((index: number, extraInfo: SwiperAnimationEvent) => {    this.hotIndex = index    console.info("index: " + index)    console.info("current offset: " + extraInfo.currentOffset)    const xOffset: number = this.scrollController.currentOffset().xOffset;    this.scrollController.scrollTo({ xOffset: index*70, yOffset: 0 })  })}

HarmonyOS NEXT开发实战教程—淘宝搜索页的更多相关文章

  1. 学习用java基于webMagic+selenium+phantomjs实现爬虫Demo爬取淘宝搜索页面

    由于业务需要,老大要我研究一下爬虫. 团队的技术栈以java为主,并且我的主语言是Java,研究时间不到一周.基于以上原因固放弃python,选择java为语言来进行开发.等之后有时间再尝试pytho ...

  2. Swift游戏开发实战教程(霸内部信息大学)

    Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程具体解说记忆配对 ...

  3. JS实现选择菜单栏(配合慕课网淘宝搜索框的课程)

    以下是关于实现慕课网淘宝搜索框的JS代码,不过只有选择菜单栏(其余比较容易实现). <!doctype html> <html> <head> <!--在IE ...

  4. selenium+PhantomJS 抓取淘宝搜索商品

    最近项目有些需求,抓取淘宝的搜索商品,抓取的品类还多.直接用selenium+PhantomJS 抓取淘宝搜索商品,快速完成. #-*- coding:utf-8 -*-__author__ =''i ...

  5. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发4- 后台模板html页面创建

    上一篇教程<asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发>完成了本项目的登录模块,登录后就需要进入后台管理首页了,需要准备一个后台模 ...

  6. asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立

    上篇(asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作)文章讲解了开发过程中的准备工作,主要创建了项目数据库及项目,本文主要讲解项目M层的实现,M层这里 ...

  7. 微信小程序-云开发实战教程

    微信小程序-云开发实战教程 云函数,云存储,云数据库,云调用 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/gettin ...

  8. JS仿淘宝详情页菜单条智能定位效果

    类似于淘宝详情页菜单条智能定位 对于每个人来说并不陌生!如下截图所示:红色框的那部分! 基本原理: 是用JS侦听滚动事件,当页面的滚动距离(页面滚动的高度)大于或者等于 "对象"( ...

  9. Web——在淘宝搜索到看到商品

    [摘自]http://blog.renren.com/blog/254459622/799372165 浏览器首先查询DNS服务器,将www.taobao.com转换成ip地址.负载均衡的第一步,将你 ...

  10. Python开发实战教程(8)-向网页提交获取数据

    来这里找志同道合的小伙伴!↑↑↑ Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知 ...

随机推荐

  1. 安全稳定地远程访问飞牛NAS

    春节前从一个网友那里了解到一个新的NAS--飞牛. 起因是我们一个用户用我们的SD-WAN来远程访问飞牛NAS,市面上做NAS的很多,之所以单独体验这个产品主要是: 不需要购买硬件,这个是非常重要的, ...

  2. [JOISC 2023 Day3] Tourism 题解

    大家好,我喜欢珂朵莉树,所以我用珂朵莉树 \(AC\) 了本题. 实际上,我们比较容易发现,这题实际上就是求 \([l,r]\) 中的所有点作为关键点时,虚树所压缩的所有点(实际上就是显现出来的点+在 ...

  3. YASKAWA安川机器人DX100轴控制基板维修解析知识

    ASKAWA安川机器人DX100轴控制基板的维修是一项复杂而精细的工作,要求具备丰富的知识和实践经验.通过与子锐机器人维修联系,希望能企业提供一些有益的参考和帮助,在面对轴板故障时能够迅速准确地找到问 ...

  4. signature hdr data: BAD (signature 头部数据:不当)

    这应该属于 rpm 4.12-4.13 早期版本的BUG,不止CentOS8会这样 解决方式也很干脆,就是手动更新rpm版本,跳过存在bug的版本,然后yum.rpm就都会正常,就可以自动更新最新的软 ...

  5. Deepin搭建git仓库服务gogs,debian也可用

    我尝试了gitlab.gitblit搭建均失败,deepin版本20.03 1. 步骤 访问gogs官网下载&安装页面 数据库(选择以下一项): MySQL:版本 >= 5.7. Pos ...

  6. MySQL - [09] 正则表达式

    转载:https://mp.weixin.qq.com/s/7RavuYGs9SthX2pxGJppqw select * from t1 where name rlike '^[a-zA-Z]+$' ...

  7. TDH - 使用DBeaver连接InceptorSQL

    TDH版本:TDH 4.3.x DBeaver版本:dbeaver-ce-23.0.4-win32.win32.x86_64 1.下载客户端(即为DBeaver连接InceptorSQL所需的驱动包) ...

  8. 他来了,为大模型量身定制的响应式编程范式(1) —— 从接入 DeepSeek 开始吧

    哒哒哒,他来了! 今天我们要介绍一种新型的 Java 响应式大模型编程范式 -- FEL.你可能听说过 langchain,那么你暂且可以把 FEL 看作是 Java 版本的 langchain. 话 ...

  9. 解决Dcat Admin laravel框架登录报错问题,(blocked:mixed-content)

    前言 在使用 Dcat Admin 后台登录时,发生 error 报错:(blocked:mixed-content) xhr VM484:1,浏览器拦截 其实这是浏览器在 HTTPS 页面中尝试加载 ...

  10. pytorch报错 No module named 'nn'

    问题描述 pytorch 报错 No module named 'nn' 如果你 import torch 没问题,而 import torch.nn时出现问题,你可能命名使用了一个名字为 torch ...