2024年最新学习笔记 (4) uni-app 下拉刷新(1),2024年最新2024阿里手淘前端面试题目

性能优化

1.webpack打包文件体积过大?(最终打包为一个js文件)

2.如何优化webpack构建的性能

3.移动端的性能优化

4.Vue的SPA 如何优化加载速度

5.移动端300ms延迟

6.页面的重构

所有的知识点都有详细的解答,我整理成了280页PDF《前端校招面试真题精编解析》。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

监听下拉刷新

通过onPullDownRefresh可以监听到下拉刷新的动作

export default {

data () {

return {

arr: [‘前端’,‘java’,‘ui’,‘大数据’]

}

},

methods: {

startPull () {

uni.startPullDownRefresh()

}

},

onPullDownRefresh () {

console.log(‘触发下拉刷新了’)

}

}

关闭下拉刷新

uni.stopPullDownRefresh()

停止当前页面下拉刷新。

案例演示

<button type=“primary” @click=“startPull”>开启下拉刷新

杭州学科

{{item}}

上拉加载

通过在pages.json文件中找到当前页面的pages节点下style中配置onReachBottomDistance可以设置距离底部开启加载的距离,默认为50px

通过onReachBottom监听到触底的行为

数据缓存

uni.setStorage

将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个异步接口。

uni.setStorageSync

将 data 存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。

<button type=“primary” @click=“setStor”>存储数据

uni.getStorageSync

从本地缓存中同步获取指定 key 对应的内容。

代码演示

<button type=“primary” @click=“getStorage”>获取数据

uni.removeStorageSync

从本地缓存中同步移除指定 key。

代码演示

<button type=“primary” @click=“removeStorage”>删除数据

条件注释实现跨段兼容

条件编译是用特殊的注释作为标记,在编译时根据这些特殊的注释,将注释里面的代码编译到不同平台。

**写法:**以 #ifdef 加平台标识 开头,以 #endif 结尾。

平台标识

| 值 | 平台 | 参考文档 |

| — | — | — |

| APP-PLUS | 5+App | HTML5+ 规范 |

| H5 | H5 | |

| MP-WEIXIN | 微信小程序 | 微信小程序 |

| MP-ALIPAY | 支付宝小程序 | 支付宝小程序 |

| MP-BAIDU | 百度小程序 | 百度小程序 |

| MP-TOUTIAO | 头条小程序 | 头条小程序 |

| MP-QQ | QQ小程序 | (目前仅cli版支持) |

| MP | 微信小程序/支付宝小程序/百度小程序/头条小程序/QQ小程序 | |

最后

javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

css源码pdf

JavaScript知识点

有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

[外链图片转存中…(img-lvGHYDmW-1715750360071)]

[外链图片转存中…(img-8ORuezhC-1715750360072)]

<think>我们已知用户要在uni-app中实现多级下拉菜单,并且提供了三个引用作为背景。根据引用[1]和[2]可知,uni-app是一个跨平台框架,使用Vue.js语法,并提供了丰富的组件和API。引用[3]给出了一个使用内置组件navigator的示例,但用户需要的多级下拉菜单属于UI组件范畴。在uni-app中实现多级下拉菜单,通常有几种方式:1.使用uni-app官方提供的扩展组件(如uni-ui)中的下拉菜单组件。2.自己手写多级下拉菜单组件,利用uni-app的视图组件(如view)和事件处理。由于引用中并未直接提供多级下拉菜单的示例,我将参考uni-app的常见做法,给出一个自实现多级下拉菜单的简单示例。考虑到uni-app的跨平台特性,我们使用其内置的视图组件和样式来实现。下面是一个三级下拉菜单的示例,使用Vue.js的响应式数据绑定和事件处理。步骤:1.准备数据:一个树形结构的数据,包含多级菜单。2.使用视图组件循环渲染每一级菜单。3.通过点击事件切换子菜单的显示与隐藏。示例代码如下:```html<template><view><!--一级菜单--><viewv-for="(item,index)inmenuData":key="index"><viewclass="menu-item"@click="toggleSubMenu(index)">{{item.title}}<!--根据当前菜单的展开状态显示箭头图标--><uni-icons:type="item.expanded?'arrowup':'arrowdown'"size="14"></uni-icons></view><!--二级菜单,当item.expanded为true时显示--><viewv-if="item.expanded"class="sub-menu"><viewv-for="(subItem,subIndex)initem.children":key="subIndex"class="sub-menu-item"@click.stop="toggleSubSubMenu(item,subIndex)">{{subItem.title}}<uni-icons:type="subItem.expanded?'arrowup':'arrowdown'"size="12"></uni-icons></view><!--三级菜单--><viewv-if="subItem.expanded"class="sub-sub-menu"><viewv-for="(subSubItem,subSubIndex)insubItem.children":key="subSubIndex"class="sub-sub-menu-item">{{subSubItem.title}}</view></view></view></view></view></template><script>exportdefault{data(){return{menuData:[{title:'菜单1',expanded:false,//控制二级菜单的展开children:[{title:'子菜单1-1',expanded:false,//控制三级菜单的展开children:[{title:'选项1-1-1'},{title:'选项1-1-2'}]},{title:'子菜单1-2',children:[]//无三级菜单}]},{title:'菜单2',expanded:false,children:[{title:'子菜单2-1'}]}]}},methods:{//切换一级菜单的展开状态toggleSubMenu(index){//切换当前一级菜单的展开状态,同时关闭其他一级菜单(如果需要,这里我们只切换当前)this.menuData[index].expanded=!this.menuData[index].expanded;//如果希望点击一级菜单时关闭其他一级菜单,可以这样://this.menuData.forEach((item,i)=>{//if(i===index){//item.expanded=!item.expanded;//}else{//item.expanded=false;//}//});},//切换二级菜单的展开状态(三级菜单的显示)toggleSubSubMenu(item,subIndex){//确保二级菜单有children才切换if(item.children[subIndex].children&&item.children[subIndex].children.length>0){item.children[subIndex].expanded=!item.children[subIndex].expanded;}}}}</script><style>.menu-item{padding:10px15px;background-color:#f5f5f5;border-bottom:1pxsolid#e5e5e5;display:flex;justify-content:space-between;align-items:center;}.sub-menu{background-color:#fff;padding-left:20px;/*缩进*/}.sub-menu-item{padding:10px15px;border-bottom:1pxsolid#eee;display:flex;justify-content:space-between;align-items:center;}.sub-sub-menu{background-color:#f9f9f9;padding-left:30px;/*更多缩进*/}.sub-sub-menu-item{padding:10px15px;border-bottom:1pxsolid#f0f0f0;}</style>```说明:1.我们使用了uni-app的内置组件`<view>`和`<uni-icons>`(需要先导入uni-icons组件,如果不想用图标,也可以用文本代替)。2.通过`expanded`属性控制每一级菜单的展开与收起。3.使用`@click`事件来触发切换,注意在二级菜单上使用`@click.stop`阻止事件冒泡到一级菜单。4.样式部分可以根据需要调整。注意:-如果使用`uni-icons`,需要在项目中安装或导入。也可以使用其他图标库或纯文本。-此示例是一个基础实现,实际项目中可能需要考虑更复杂的交互和样式兼容各平台。另外,uni-app的官方扩展库uni-ui中提供了`uni-dropdown`组件,但它是单级下拉菜单。多级下拉菜单通常需要自己实现或者使用其他第三方组件库。建议:1.如果需要更复杂的多级下拉菜单(如下拉树形菜单),可以考虑使用第三方插件,例如在插件市场搜索“多级下拉菜单”。2.注意跨平台兼容性,特别是各小程序平台和H5的样式和事件可能有差异。相关问题:1.uni-app中如何使用uni-ui组件库?2.uni-app中如何实现跨平台样式兼容?3.uni-app中如何引入和使用自定义图标?以上代码示例和说明应能帮助用户实现一个基本的多级下拉菜单。根据具体需求,用户可能需要调整数据结构和样式。</think> 下面是在 uni-app 中实现多级下拉菜单的示例代码和详细教程,结合了 uni-app 的组件特性和 Vue.js 语法: ### 解决方案(基于 uni-app 内置组件和 Vue.js) ```html <template> <view class="container"> <!-- 一级菜单 --> <view v-for="(item, index) in menuData" :key="index" class="menu-item"> <view class="menu-title" @click="toggleMenu(index)"> {{ item.title }} <uni-icons :type="item.expanded ? 'arrowup' : 'arrowdown'" size="14"></uni-icons> </view> <!-- 二级菜单 --> <view v-show="item.expanded" class="submenu"> <view v-for="(subItem, subIndex) in item.children" :key="subIndex" class="submenu-item" @click="toggleSubmenu(item, subIndex)"> {{ subItem.title }} <uni-icons v-if="subItem.children" :type="subItem.expanded ? 'arrowup' : 'arrowdown'" size="12"></uni-icons> </view> <!-- 三级菜单 --> <view v-show="subItem.expanded" class="subsubmenu"> <view v-for="(subSubItem, subSubIndex) in subItem.children" :key="subSubIndex" class="subsubmenu-item" @click="selectOption(item, subItem, subSubItem)"> {{ subSubItem.title }} </view> </view> </view> </view> </view> </template> <script> export default { data() { return { menuData: [ { title: '电子产品', expanded: false, children: [ { title: '手机', expanded: false, children: [ { title: 'iPhone' }, { title: 'Android' }, { title: '折叠屏' } ] }, { title: '电脑', children: [ { title: '笔记本' }, { title: '台式机' } ] } ] }, { title: '服装', expanded: false, children: [ { title: '男装', children: [ { title: '衬衫' }, { title: '外套' } ] }, { title: '女装', children: [ { title: '连衣裙' }, { title: '上衣' } ] } ] } ] } }, methods: { // 切换一级菜单展开状态 toggleMenu(index) { this.menuData[index].expanded = !this.menuData[index].expanded // 可选:关闭其他展开的菜单 this.menuData.forEach((item, i) => { if (i !== index) item.expanded = false }) }, // 切换二级菜单展开状态 toggleSubmenu(parentItem, subIndex) { const subItem = parentItem.children[subIndex] // 如果有子菜单才切换展开状态 if (subItem.children) { subItem.expanded = !subItem.expanded // 关闭同级其他菜单 parentItem.children.forEach((item, i) => { if (i !== subIndex && item.children) { item.expanded = false } }) } else { // 没有子菜单时直接选择该项 this.selectOption(parentItem, subItem) } }, // 选择最终选项 selectOption(parentItem, subItem, subSubItem) { const selectedItem = subSubItem || subItem uni.showToast({ title: `已选择: ${parentItem.title} > ${subItem.title}${subSubItem ? ' > ' + subSubItem.title : ''}`, icon: 'success' }) // 可在此处执行页面跳转或其他业务逻辑 // uni.navigateTo({ url: '...' }) } } } </script> <style> .container { padding: 20rpx; } .menu-item { margin-bottom: 10rpx; border-radius: 8rpx; overflow: hidden; } .menu-title { padding: 20rpx; background-color: #f5f5f5; display: flex; justify-content: space-between; align-items: center; } .submenu { background-color: #f9f9f9; padding-left: 30rpx; } .submenu-item { padding: 15rpx 20rpx; border-bottom: 1rpx solid #eee; display: flex; justify-content: space-between; align-items: center; } .subsubmenu { background-color: #fff; padding-left: 40rpx; } .subsubmenu-item { padding: 15rpx 20rpx; border-bottom: 1rpx dashed #eee; } </style> ``` ### 功能说明 1. **三级菜单结构**: - 一级菜单(垂直列表) - 二级菜单(从一级菜单右侧滑出) - 三级菜单(从二级菜单下方展开) 2. **核心交互**: - 点击菜单标题展开/收起子菜单 - 支持无限级嵌套(示例展示三级) - 点击最后一级菜单触发选择事件 3. **技术要点**: - 使用 `uni-icons` 组件显示箭头图标(需安装 `@dcloudio/uni-ui`) - 通过 Vue 的 `v-show` 控制菜单显隐 - 使用 `expanded` 状态属性管理展开状态 - 点击事件冒泡处理(`@click.stop` 阻止事件冒泡) ### 优化建议 1. **性能优化**: ```javascript // 在大型菜单中使用计算属性 computed: { activeMenu() { return this.menuData.filter(item => item.expanded) } } ``` 2. **动画效果**(添加过渡动画): ```css .submenu { transition: all 0.3s ease; max-height: 0; overflow: hidden; } .submenu.expanded { max-height: 1000px; } ``` 3. **复杂场景**: - 使用 `<scroll-view>` 包裹长列表 - 添加搜索过滤功能 - 实现多选模式(添加复选框) ### 学习资源推荐 1. [uni-app 官方组件文档](https://uniapp.dcloud.net.cn/component/view.html) - 学习基础组件使用 [^1] 2. [uni-ui 扩展组件库](https://ext.dcloud.net.cn/plugin?id=55) - 包含增强型组件 [^2] 3. [Vue.js 事件处理指南](https://cn.vuejs.org/v2/guide/events.html) - 深入理解事件机制 [^1] [^1]: Uni-app跨平台开发框架基础概念。 [^2]: uni-app快速开发模板:助力高效项目构建的技术探索。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值