HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

vue3+vite6+vant4仿deepseek/chatgpt流式ai聊天会话

vite vue3

基于vue3+deepseek实战纯撸一款仿DeepSeek/ChatGPT流式聊天AI对话聊天。
集成Vue3 对接 DeepSeek Web API 流式打字输出对话大模型。支持代码高亮、本地缓存,支持移动端+PC端完美显示。

项目结构

特性

  • 流式响应:逐字显示 AI 回复,提供更好的用户体验
    优雅的 UI 设计:
    • 气泡式对话界面
    • 打字机效果
    • 平滑的动画过渡
    • 响应式布局

想要了解更多的技术实现细节可以去参考下面这篇分享文章。
Vue3-DeepSeek流式AI聊天|vite6+vant4+deepseek智能ai对话助手

继续阅读 »

基于vue3+deepseek实战纯撸一款仿DeepSeek/ChatGPT流式聊天AI对话聊天。
集成Vue3 对接 DeepSeek Web API 流式打字输出对话大模型。支持代码高亮、本地缓存,支持移动端+PC端完美显示。

项目结构

特性

  • 流式响应:逐字显示 AI 回复,提供更好的用户体验
    优雅的 UI 设计:
    • 气泡式对话界面
    • 打字机效果
    • 平滑的动画过渡
    • 响应式布局

想要了解更多的技术实现细节可以去参考下面这篇分享文章。
Vue3-DeepSeek流式AI聊天|vite6+vant4+deepseek智能ai对话助手

收起阅读 »

最近更新的HBuilder,卡巴基斯频繁警报并删除Hbuilder

木马

事件: 检测到恶意对象
应用程序: HBuilder X
用户: X\xzm
用户类型: 活动用户
组件: 系统监控
结果说明: 检测到
类型: 木马
名称: PDM:Trojan.Win32.Generic
威胁级别: 高
对象类型: 进程
对象路径: d:\developertools\hbuilderx
对象名称: hbuilderx.exe
原因: 数据库
数据库发布日期: 昨天,2025/3/15 20:55:00

继续阅读 »

事件: 检测到恶意对象
应用程序: HBuilder X
用户: X\xzm
用户类型: 活动用户
组件: 系统监控
结果说明: 检测到
类型: 木马
名称: PDM:Trojan.Win32.Generic
威胁级别: 高
对象类型: 进程
对象路径: d:\developertools\hbuilderx
对象名称: hbuilderx.exe
原因: 数据库
数据库发布日期: 昨天,2025/3/15 20:55:00

收起阅读 »

有懂uniapp+unicloud+uview的小伙伴想可以联系呀!

uview uniCloud uniapp

最近我想开发一个项目是小程序类的,部分页面需要小伙伴协助开发
如果你懂得uniapp+unicloud+uview那么非常欢迎您联系我呀
有偿的,有偿,有偿!重要的事情说三遍。
兼职类的哦不是全职,欢迎联系呀。

最近我想开发一个项目是小程序类的,部分页面需要小伙伴协助开发
如果你懂得uniapp+unicloud+uview那么非常欢迎您联系我呀
有偿的,有偿,有偿!重要的事情说三遍。
兼职类的哦不是全职,欢迎联系呀。

关于 uni 安全加固 - 腾讯云加固产品下线的公告

加固

因供应商调整,腾讯云安全加固产品将于2025年4月1日下线,请改用支付宝提供的加固。收费标准不变:测试版免费,正式版600元/次。

  • 如有 uni 安全加固相关功能建议或问题,可加入 uni-im交流群讨论,点此加入
  • uni安全加固使用手册。详见
继续阅读 »

因供应商调整,腾讯云安全加固产品将于2025年4月1日下线,请改用支付宝提供的加固。收费标准不变:测试版免费,正式版600元/次。

  • 如有 uni 安全加固相关功能建议或问题,可加入 uni-im交流群讨论,点此加入
  • uni安全加固使用手册。详见
收起阅读 »

自动化测试, 一直报Failed to connect to runtime,调试自定义基座

自动化测试

我一直报错是因为在 env.js 里面设置了自定义基座,设置的不正确。
两种解决方案
1、不跑自定义基座,把env.js、jest.config.js 删除掉,重新自动化测试,他会重新生成初始文件就可以跑app标准基座了

2、根据我下面的图片,在env.js 里面设置自定义基座配置,自定义基座的包路径一定要正确。

继续阅读 »

我一直报错是因为在 env.js 里面设置了自定义基座,设置的不正确。
两种解决方案
1、不跑自定义基座,把env.js、jest.config.js 删除掉,重新自动化测试,他会重新生成初始文件就可以跑app标准基座了

2、根据我下面的图片,在env.js 里面设置自定义基座配置,自定义基座的包路径一定要正确。

收起阅读 »

uni-steps 组件左侧的线和点显示异常

uni-app

描述:
uni-app 开发微信小程序,uni-steps 组件左侧的线和点显示异常。

解决办法:
在 uni-steps 组件上加一个判断,当列表不为空的时候才渲染组件,下面示例代码中 listArry 就是节点列表。

<uni-steps v-if="listArry.length > 0" ></uni-steps>

原因:
uni-steps 组件渲染时会获取右侧文本的高度,并且 +1 后作为左侧点线的高度,当节点列表为空,右侧没有文本信息,获取到的高度是 undefined,导致显示异常。

继续阅读 »

描述:
uni-app 开发微信小程序,uni-steps 组件左侧的线和点显示异常。

解决办法:
在 uni-steps 组件上加一个判断,当列表不为空的时候才渲染组件,下面示例代码中 listArry 就是节点列表。

<uni-steps v-if="listArry.length > 0" ></uni-steps>

原因:
uni-steps 组件渲染时会获取右侧文本的高度,并且 +1 后作为左侧点线的高度,当节点列表为空,右侧没有文本信息,获取到的高度是 undefined,导致显示异常。

收起阅读 »

IOS系统的input文本框的输入法有问题

input iOS

iPhone手机, input文本框弹出的输入法只有繁体手写功能,没有键盘。
此时我把手机的地区从mei国改成zhongguodalu就正常了。

iPhone手机, input文本框弹出的输入法只有繁体手写功能,没有键盘。
此时我把手机的地区从mei国改成zhongguodalu就正常了。

2025年DCloud插件大赛正式启动,30部鸿蒙手机大放送!

公告

1.2025年DCloud插件大赛启动,30部鸿蒙手机大放送!

为进一步繁荣uni生态,特别是推动鸿蒙平台的生态建设,惠及产业和开发者,DCloud 正式启动「2025年度插件大赛」。

大赛准备了丰富的奖励,除了流量、荣誉外还有30部纯血鸿蒙手机。

详情

2.腾讯云服务空间套餐升级

腾讯云服务空间套餐于2025年6月30日进行升级,升级针对部分套餐额度和能力进行了调整

  • 套餐版本新增及下线各三个,已有套餐用户不受影响可继续使用、续费
  • 新增套餐及现有的个人版套餐资源配额提升,部分配额提升50% ~ 100%,个人版套餐资源配额提升已实时生效
  • 199元以下套餐,即个人版、入门版两个套餐将不再支持固定出口IP和数据库回档能力,如有需求可升级更高套餐版本

更多详见相关公告

3.vue2项目sass编译器调整

HBuilderX 4.5+起,vue2的sass编译器由node-sass改为dart-sass。node-sass是已经被淘汰的不再维护的库,且不支持arm cpu。
node-sass有些过期语法在dart-sass上报错导致无法编译。
虽然默认为dart-sass,但HBuilderX 4.56版也提供了选项,可以手动选择node-sass。在manifest.json中根节点配置"sassImplementationName": "node-sass"。
注意这个回退选项的生效范围是:vue2项目且HBuilderX不是arm版。
vue3一直都是dart-sass,不需要node-sass的选项;
node-sass本身不支持arm cpu。
如果开发者的mac电脑是arm cpu且仍想要为vue2项目使用node-sass,需要改用HBuilderX的mac intel cpu版。intel 版也可以以兼容模式在mac的arm cpu上运行。

当然我们仍然推荐开发者修改不兼容的代码,适配dart-sass,这2种sass编译器的常见语法差异及修改方案见:文档

HBuilderX 4.55没有回退选项,请开发者升级到HBuilderX 4.56。

4. HBuilderX Mac版推出了arm专版,适配M系列CPU

在HBuilderX官网下载时,请注意选择mac的intel版(也称为x86版)和arm版(也称为m系列cpu版)。
intel版也可以用于arm CPU。但arm版仅能在M系列CPU上运行。
下载地址详见:https://www.dcloud.io/hbuilderx.html

注意node-sass自身不支持arm,所以arm版HBuilderX仅能使用dart-sass。

5. HBuilderX在linux平台推出了cli版本,方便工程自动化和持续集成

详见

继续阅读 »

1.2025年DCloud插件大赛启动,30部鸿蒙手机大放送!

为进一步繁荣uni生态,特别是推动鸿蒙平台的生态建设,惠及产业和开发者,DCloud 正式启动「2025年度插件大赛」。

大赛准备了丰富的奖励,除了流量、荣誉外还有30部纯血鸿蒙手机。

详情

2.腾讯云服务空间套餐升级

腾讯云服务空间套餐于2025年6月30日进行升级,升级针对部分套餐额度和能力进行了调整

  • 套餐版本新增及下线各三个,已有套餐用户不受影响可继续使用、续费
  • 新增套餐及现有的个人版套餐资源配额提升,部分配额提升50% ~ 100%,个人版套餐资源配额提升已实时生效
  • 199元以下套餐,即个人版、入门版两个套餐将不再支持固定出口IP和数据库回档能力,如有需求可升级更高套餐版本

更多详见相关公告

3.vue2项目sass编译器调整

HBuilderX 4.5+起,vue2的sass编译器由node-sass改为dart-sass。node-sass是已经被淘汰的不再维护的库,且不支持arm cpu。
node-sass有些过期语法在dart-sass上报错导致无法编译。
虽然默认为dart-sass,但HBuilderX 4.56版也提供了选项,可以手动选择node-sass。在manifest.json中根节点配置"sassImplementationName": "node-sass"。
注意这个回退选项的生效范围是:vue2项目且HBuilderX不是arm版。
vue3一直都是dart-sass,不需要node-sass的选项;
node-sass本身不支持arm cpu。
如果开发者的mac电脑是arm cpu且仍想要为vue2项目使用node-sass,需要改用HBuilderX的mac intel cpu版。intel 版也可以以兼容模式在mac的arm cpu上运行。

当然我们仍然推荐开发者修改不兼容的代码,适配dart-sass,这2种sass编译器的常见语法差异及修改方案见:文档

HBuilderX 4.55没有回退选项,请开发者升级到HBuilderX 4.56。

4. HBuilderX Mac版推出了arm专版,适配M系列CPU

在HBuilderX官网下载时,请注意选择mac的intel版(也称为x86版)和arm版(也称为m系列cpu版)。
intel版也可以用于arm CPU。但arm版仅能在M系列CPU上运行。
下载地址详见:https://www.dcloud.io/hbuilderx.html

注意node-sass自身不支持arm,所以arm版HBuilderX仅能使用dart-sass。

5. HBuilderX在linux平台推出了cli版本,方便工程自动化和持续集成

详见

收起阅读 »

uni-app 实现好看易用的抽屉效果

uni_app

​一. 前言
我之前使用 uni-app 和 uniCloud 开发了一款软考刷题应用,在这个应用中,我使用了抽屉组件来实现一些功能,切换题库,如下图所示:

在移动应用开发中,抽屉(Drawer)是一种常见的界面设计模式,这个组件可以在需要侧边导航或者额外信息展示的地方使用。它允许用户通过侧滑的效果打开一个菜单或额外的内容区域。
这种设计不仅能够节省屏幕空间,还能提供一种直观的交互方式。
例如,在电商应用中,可以将购物车或分类列表放在抽屉里;在新闻阅读器中,可以放置频道选择等;而在有题记刷题软件中,我主要用于题库的选择功能。
本文将介绍如何使用 uni-app 框架来实现一个简单的抽屉组件:DrawerWindow。文末提供完整的代码示例,让你能够轻松地在 uni-app 中实现抽屉效果。


看新机会的
技术大厂,待遇之类的给的还可以,就是偶尔有加班(放心,加班有加班费)
前后端测试捞人,多地有空位,感兴趣的可以试试~

二. 实现分析
Vue 组件的结构通常由三个主要部分组成:模板(<template>)、脚本(<script>)和样式(<style>),标准的的单文件组件(SFC)结构。
uni-app 也是如此,在这个组件中,我们也将使用 Vue 的单文件组件(SFC)结构,这意味着我们将在一个 .vue 文件中同时包含模板、脚本和样式。
接下来我们按照这个格式来简单实现一下。

    1. 模板页面 (<template>)
      首先,模版页面是很简单的部分,我们需要创建一个基础的 Vue 组件,该组件包含了主页面、抽屉内容和关闭按钮三个部分。以下是组件的模板代码:
      <template>
      <view class="drawer-window-wrap">
      <scroll-view scroll-y class="DrawerPage" :class="{ show: modalName === 'viewModal' }">
      <!-- 主页面 -->
      <slot></slot>
      </scroll-view>
      <!-- 关闭抽屉 -->
      <view class="DrawerClose" :class="{ show: modalName === 'viewModal' }" @tap="hide">
      <u-icon name="backspace"></u-icon>
      </view>
      <!-- 抽屉页面 -->
      <scroll-view scroll-y class="DrawerWindow" :class="{ show: modalName === 'viewModal' }">
      <slot name="drawer"></slot>
      </scroll-view>
      </view>
      </template>

在模板部分,我们主要定义了三个主要元素:主页面、关闭按钮和抽屉页面。每个元素都有一个class绑定,这个绑定会根据 modalName 的状态来决定是否添加 .show 类。

主页面 (<scroll-view class="DrawerPage">):

这个滚动视图代表应用的主要内容区域。
当抽屉打开时,它会被缩小并移向屏幕右侧。
提供默认插槽 <slot></slot>,允许父组件传递自定义内容到这个位置。

关闭按钮 (<view class="DrawerClose">):

位于屏幕右侧的一个透明背景层,当点击时触发 hide() 方法来关闭抽屉。
包含了一个图标 <u-icon name="backspace"></u-icon>,这里使用的是 uView UI 库中的图标组件。你可以选用其他组件库里的图标或者图片。

抽屉页面 (<scroll-view class="DrawerWindow">):

这是抽屉本身的内容区域,通常包含菜单或其他附加信息。
同样地,定义特有的插槽名称,<slot name="drawer"></slot> 允许从外部插入特定的内容。
抽屉默认是隐藏的,并且当显示时会有动画效果。

在这里,我们主要使用了 <slot> 元素来定义可以插入自定义内容的位置。modalName 属性用来控制抽屉的状态。

  1. 逻辑处理 (<script>)
    接下来,逻辑处理其实也很简单,主要会定义打开和关闭抽屉的方法:
    javascript 代码解读复制代码<script>
    export default {
    data() {
    return {
    modalName: null
    }
    },
    methods: {
    // 打开抽屉
    show() {
    this.modalName = 'viewModal';
    },
    // 关闭抽屉
    hide() {
    this.modalName = null;
    }
    }
    }
    </script>

数据 (data):

modalName: 用于控制抽屉状态的数据属性。当它的值为 'viewModal' 时,表示抽屉处于打开状态;否则,抽屉是关闭的。

方法 (methods):

show(): 将 modalName 设置为'viewModal',从而通过 CSS 样式控制抽屉显示。
hide(): 将 modalName 重置为 null,控制抽屉隐藏。

当调用 show() 方法时,modalName 被设置为 'viewModal',这会触发 CSS 中的 .show 类,从而显示抽屉;反之,调用 hide() 方法则会隐藏抽屉。

  1. 样式设计 (<style>)
    在这个组件中,其实要做好的在样式部分,主要是显示抽屉的动画部分。在主页面,我们主要定义了三个主要的样式类:主页面、关闭按钮和抽屉页面。

主页面样式 (DrawerPage):

初始状态下占据整个屏幕宽度和高度。
当抽屉打开时(即有.show类),页面会缩小并移动到屏幕右侧 85%的位置,同时增加阴影效果以模拟深度。

关闭按钮样式 (DrawerClose):

默认情况下是不可见且不响应用户交互的。
当抽屉打开时,按钮变为可见并可点击,提供了一种关闭抽屉的方式。

抽屉页面样式 (DrawerWindow):

初始状态下位于屏幕左侧外侧,不显示也不响应交互。
当抽屉打开时,抽屉平滑滑入屏幕内,变得完全可见且可以与用户互动。

动画与过渡

所有的 .show 类都带有 transition: all 0.4s;,这使得任何属性的变化都会有一个 0.4 秒的平滑过渡效果。
抽屉和主页面的 transform 属性被用来控制它们的位置和大小变化。
opacity 和 pointer-events 属性确保在不需要时抽屉不会影响用户的操作。

如下代码所示,我们主要添加一些 CSS 样式来实现平滑的过渡效果以及视觉上的美观:
scss 代码解读复制代码<style lang="scss">
// 省略其他样式...
.DrawerPage.show,
.DrawerWindow.show,
.DrawerClose.show {
transition: all 0.4s;
}

.DrawerPage.show {
transform: scale(0.9, 0.9) translateX(85vw);
box-shadow: 0 0 60rpx rgba(0, 0, 0, 0.2);
}

.DrawerWindow.show {
transform: scale(1, 1) translateX(0%);
opacity: 1;
pointer-events: all;
}

.DrawerClose.show {
width: 15vw;
color: #fff;
opacity: 1;
pointer-events: all;
}
</style>

以上的这些样式确保了当抽屉显示或隐藏时有流畅的动画效果,并且在不需要的时候不会影响用户的交互。
三. 完整代码

  1. 完整抽屉组件,复制可使用
    html 代码解读复制代码<template>
    <view class="drawer-window-wrap">
    <scroll-view scroll-y class="DrawerPage" :class="modalName == 'viewModal' ? 'show' : ''">
    <!-- 主页面 -->
    <slot></slot>
    </scroll-view>
    <!-- 关闭抽屉 -->
    <view class="DrawerClose" :class="modalName == 'viewModal' ? 'show' : ''" @tap="hide()">
    <u-icon name="backspace"></u-icon>
    </view>
    <!-- 抽屉页面 -->
    <scroll-view scroll-y class="DrawerWindow" :class="modalName == 'viewModal' ? 'show' : ''">
    <slot name="drawer"></slot>
    </scroll-view>
    </view>
    </template>

<script>
export default {
data() {
return {
modalName: null
}
},
methods: {
// 打开抽屉
show() {
this.modalName = 'viewModal'
},
// 关闭抽屉
hide() {
this.modalName = null
}
}
}
</script>

<style lang="scss">
page {
width: 100vw;
overflow: hidden !important;
}

.DrawerPage {
position: fixed;
width: 100vw;
height: 100vh;
left: 0vw;
background-color: #f1f1f1;
transition: all 0.4s;
}

.DrawerPage.show {
transform: scale(0.9, 0.9);
left: 85vw;
box-shadow: 0 0 60rpx rgba(0, 0, 0, 0.2);
transform-origin: 0;
}

.DrawerWindow {
position: absolute;
width: 85vw;
height: 100vh;
left: 0;
top: 0;
transform: scale(0.9, 0.9) translateX(-100%);
opacity: 0;
pointer-events: none;
transition: all 0.4s;
background-image: linear-gradient(45deg, #1cbbb4, #2979ff) !important;
}

.DrawerWindow.show {
transform: scale(1, 1) translateX(0%);
opacity: 1;
pointer-events: all;
}

.DrawerClose {
position: absolute;
width: 40vw;
height: 100vh;
right: 0;
top: 0;
color: transparent;
padding-bottom: 50rpx;
display: flex;
align-items: flex-end;
justify-content: center;
background-image: linear-gradient(90deg, rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 0.6));
letter-spacing: 5px;
font-size: 50rpx;
opacity: 0;
pointer-events: none;
transition: all 0.4s;
}

.DrawerClose.show {
opacity: 1;
pointer-events: all;
width: 15vw;
color: #fff;
}
</style>

  1. 在父组件中使用抽屉组件
    在父组件中,可以通过以下简单的代码使用它,你可以继续进行丰富:
    html 代码解读复制代码<template>
    <drawer-window ref="drawerWindow">
    <view class="main-container" @click="$refs.drawerWindow.show()">
    主页面,点击打开抽屉
    </view>
    <view slot="drawer" class="drawer-container"> 抽屉页面 </view>
    </drawer-window>
    </template>

<script>
export default {}
</script>

<style lang="scss" scoped>
.main-container,
.drawer-container {
font-weight: 700;
font-size: 20px;
text-align: center;
color: #333;
padding-top: 100px;
}
</style>

以上代码的实现效果如下图所示:

四. 小程序体验
以上的组件,来源于我独立开发的软考刷题小程序中的效果,想要体验或软考刷题的掘友可以参考以下文章,文末获取:
软考小工具重磅更新啦!最好用的软考刷题工具
五. 结语
通过以上步骤,我们已经构建了一个基本的抽屉组件。当然,你也可以根据具体的应用场景对这个组件进行进一步的定制和优化。

——转载自作者:前端梦工厂

继续阅读 »

​一. 前言
我之前使用 uni-app 和 uniCloud 开发了一款软考刷题应用,在这个应用中,我使用了抽屉组件来实现一些功能,切换题库,如下图所示:

在移动应用开发中,抽屉(Drawer)是一种常见的界面设计模式,这个组件可以在需要侧边导航或者额外信息展示的地方使用。它允许用户通过侧滑的效果打开一个菜单或额外的内容区域。
这种设计不仅能够节省屏幕空间,还能提供一种直观的交互方式。
例如,在电商应用中,可以将购物车或分类列表放在抽屉里;在新闻阅读器中,可以放置频道选择等;而在有题记刷题软件中,我主要用于题库的选择功能。
本文将介绍如何使用 uni-app 框架来实现一个简单的抽屉组件:DrawerWindow。文末提供完整的代码示例,让你能够轻松地在 uni-app 中实现抽屉效果。


看新机会的
技术大厂,待遇之类的给的还可以,就是偶尔有加班(放心,加班有加班费)
前后端测试捞人,多地有空位,感兴趣的可以试试~

二. 实现分析
Vue 组件的结构通常由三个主要部分组成:模板(<template>)、脚本(<script>)和样式(<style>),标准的的单文件组件(SFC)结构。
uni-app 也是如此,在这个组件中,我们也将使用 Vue 的单文件组件(SFC)结构,这意味着我们将在一个 .vue 文件中同时包含模板、脚本和样式。
接下来我们按照这个格式来简单实现一下。

    1. 模板页面 (<template>)
      首先,模版页面是很简单的部分,我们需要创建一个基础的 Vue 组件,该组件包含了主页面、抽屉内容和关闭按钮三个部分。以下是组件的模板代码:
      <template>
      <view class="drawer-window-wrap">
      <scroll-view scroll-y class="DrawerPage" :class="{ show: modalName === 'viewModal' }">
      <!-- 主页面 -->
      <slot></slot>
      </scroll-view>
      <!-- 关闭抽屉 -->
      <view class="DrawerClose" :class="{ show: modalName === 'viewModal' }" @tap="hide">
      <u-icon name="backspace"></u-icon>
      </view>
      <!-- 抽屉页面 -->
      <scroll-view scroll-y class="DrawerWindow" :class="{ show: modalName === 'viewModal' }">
      <slot name="drawer"></slot>
      </scroll-view>
      </view>
      </template>

在模板部分,我们主要定义了三个主要元素:主页面、关闭按钮和抽屉页面。每个元素都有一个class绑定,这个绑定会根据 modalName 的状态来决定是否添加 .show 类。

主页面 (<scroll-view class="DrawerPage">):

这个滚动视图代表应用的主要内容区域。
当抽屉打开时,它会被缩小并移向屏幕右侧。
提供默认插槽 <slot></slot>,允许父组件传递自定义内容到这个位置。

关闭按钮 (<view class="DrawerClose">):

位于屏幕右侧的一个透明背景层,当点击时触发 hide() 方法来关闭抽屉。
包含了一个图标 <u-icon name="backspace"></u-icon>,这里使用的是 uView UI 库中的图标组件。你可以选用其他组件库里的图标或者图片。

抽屉页面 (<scroll-view class="DrawerWindow">):

这是抽屉本身的内容区域,通常包含菜单或其他附加信息。
同样地,定义特有的插槽名称,<slot name="drawer"></slot> 允许从外部插入特定的内容。
抽屉默认是隐藏的,并且当显示时会有动画效果。

在这里,我们主要使用了 <slot> 元素来定义可以插入自定义内容的位置。modalName 属性用来控制抽屉的状态。

  1. 逻辑处理 (<script>)
    接下来,逻辑处理其实也很简单,主要会定义打开和关闭抽屉的方法:
    javascript 代码解读复制代码<script>
    export default {
    data() {
    return {
    modalName: null
    }
    },
    methods: {
    // 打开抽屉
    show() {
    this.modalName = 'viewModal';
    },
    // 关闭抽屉
    hide() {
    this.modalName = null;
    }
    }
    }
    </script>

数据 (data):

modalName: 用于控制抽屉状态的数据属性。当它的值为 'viewModal' 时,表示抽屉处于打开状态;否则,抽屉是关闭的。

方法 (methods):

show(): 将 modalName 设置为'viewModal',从而通过 CSS 样式控制抽屉显示。
hide(): 将 modalName 重置为 null,控制抽屉隐藏。

当调用 show() 方法时,modalName 被设置为 'viewModal',这会触发 CSS 中的 .show 类,从而显示抽屉;反之,调用 hide() 方法则会隐藏抽屉。

  1. 样式设计 (<style>)
    在这个组件中,其实要做好的在样式部分,主要是显示抽屉的动画部分。在主页面,我们主要定义了三个主要的样式类:主页面、关闭按钮和抽屉页面。

主页面样式 (DrawerPage):

初始状态下占据整个屏幕宽度和高度。
当抽屉打开时(即有.show类),页面会缩小并移动到屏幕右侧 85%的位置,同时增加阴影效果以模拟深度。

关闭按钮样式 (DrawerClose):

默认情况下是不可见且不响应用户交互的。
当抽屉打开时,按钮变为可见并可点击,提供了一种关闭抽屉的方式。

抽屉页面样式 (DrawerWindow):

初始状态下位于屏幕左侧外侧,不显示也不响应交互。
当抽屉打开时,抽屉平滑滑入屏幕内,变得完全可见且可以与用户互动。

动画与过渡

所有的 .show 类都带有 transition: all 0.4s;,这使得任何属性的变化都会有一个 0.4 秒的平滑过渡效果。
抽屉和主页面的 transform 属性被用来控制它们的位置和大小变化。
opacity 和 pointer-events 属性确保在不需要时抽屉不会影响用户的操作。

如下代码所示,我们主要添加一些 CSS 样式来实现平滑的过渡效果以及视觉上的美观:
scss 代码解读复制代码<style lang="scss">
// 省略其他样式...
.DrawerPage.show,
.DrawerWindow.show,
.DrawerClose.show {
transition: all 0.4s;
}

.DrawerPage.show {
transform: scale(0.9, 0.9) translateX(85vw);
box-shadow: 0 0 60rpx rgba(0, 0, 0, 0.2);
}

.DrawerWindow.show {
transform: scale(1, 1) translateX(0%);
opacity: 1;
pointer-events: all;
}

.DrawerClose.show {
width: 15vw;
color: #fff;
opacity: 1;
pointer-events: all;
}
</style>

以上的这些样式确保了当抽屉显示或隐藏时有流畅的动画效果,并且在不需要的时候不会影响用户的交互。
三. 完整代码

  1. 完整抽屉组件,复制可使用
    html 代码解读复制代码<template>
    <view class="drawer-window-wrap">
    <scroll-view scroll-y class="DrawerPage" :class="modalName == 'viewModal' ? 'show' : ''">
    <!-- 主页面 -->
    <slot></slot>
    </scroll-view>
    <!-- 关闭抽屉 -->
    <view class="DrawerClose" :class="modalName == 'viewModal' ? 'show' : ''" @tap="hide()">
    <u-icon name="backspace"></u-icon>
    </view>
    <!-- 抽屉页面 -->
    <scroll-view scroll-y class="DrawerWindow" :class="modalName == 'viewModal' ? 'show' : ''">
    <slot name="drawer"></slot>
    </scroll-view>
    </view>
    </template>

<script>
export default {
data() {
return {
modalName: null
}
},
methods: {
// 打开抽屉
show() {
this.modalName = 'viewModal'
},
// 关闭抽屉
hide() {
this.modalName = null
}
}
}
</script>

<style lang="scss">
page {
width: 100vw;
overflow: hidden !important;
}

.DrawerPage {
position: fixed;
width: 100vw;
height: 100vh;
left: 0vw;
background-color: #f1f1f1;
transition: all 0.4s;
}

.DrawerPage.show {
transform: scale(0.9, 0.9);
left: 85vw;
box-shadow: 0 0 60rpx rgba(0, 0, 0, 0.2);
transform-origin: 0;
}

.DrawerWindow {
position: absolute;
width: 85vw;
height: 100vh;
left: 0;
top: 0;
transform: scale(0.9, 0.9) translateX(-100%);
opacity: 0;
pointer-events: none;
transition: all 0.4s;
background-image: linear-gradient(45deg, #1cbbb4, #2979ff) !important;
}

.DrawerWindow.show {
transform: scale(1, 1) translateX(0%);
opacity: 1;
pointer-events: all;
}

.DrawerClose {
position: absolute;
width: 40vw;
height: 100vh;
right: 0;
top: 0;
color: transparent;
padding-bottom: 50rpx;
display: flex;
align-items: flex-end;
justify-content: center;
background-image: linear-gradient(90deg, rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 0.6));
letter-spacing: 5px;
font-size: 50rpx;
opacity: 0;
pointer-events: none;
transition: all 0.4s;
}

.DrawerClose.show {
opacity: 1;
pointer-events: all;
width: 15vw;
color: #fff;
}
</style>

  1. 在父组件中使用抽屉组件
    在父组件中,可以通过以下简单的代码使用它,你可以继续进行丰富:
    html 代码解读复制代码<template>
    <drawer-window ref="drawerWindow">
    <view class="main-container" @click="$refs.drawerWindow.show()">
    主页面,点击打开抽屉
    </view>
    <view slot="drawer" class="drawer-container"> 抽屉页面 </view>
    </drawer-window>
    </template>

<script>
export default {}
</script>

<style lang="scss" scoped>
.main-container,
.drawer-container {
font-weight: 700;
font-size: 20px;
text-align: center;
color: #333;
padding-top: 100px;
}
</style>

以上代码的实现效果如下图所示:

四. 小程序体验
以上的组件,来源于我独立开发的软考刷题小程序中的效果,想要体验或软考刷题的掘友可以参考以下文章,文末获取:
软考小工具重磅更新啦!最好用的软考刷题工具
五. 结语
通过以上步骤,我们已经构建了一个基本的抽屉组件。当然,你也可以根据具体的应用场景对这个组件进行进一步的定制和优化。

——转载自作者:前端梦工厂

收起阅读 »

uniapp,开发的一些插件,需要自取。有需要优化或者有bug的请发评论。后续有更新新插件会继续加上。

分享插件 插件 uniapp插件 插件开发

招聘 uni app开发工程师

vue3 node.js uni_app项目 招聘

工作地点:河南郑州市中原区
学历:本科及以上学历
薪资范围:9K~13K*13薪
福利待遇:双休、五险一金、包午餐(四菜一汤一份水果)

职责描述:
1、负责基于H5、uni-App的手机APP 、小程序的设计与开发;
2、负责公司现有小程序、APP的开发、重构与优化;
3、参与公司级APP的发展方向的规划与设计;
4、参与APP研发技术的积累、学习、实践工作;
5、参与公司其他前端技术支持工作。

任职要求:
1、本科及以上学历,计算机、软件、设计等相关专业;
2、1年或以上手机端相关开发经验,一个以上项目跨平台APP开发经验;
3、精通符合W3C标准的Html5、JavaScript和CSS相关技术;
4、精通JSON、XML等通信格式以及基于AJAX请求实现与后台数据交互;
5、精通Vue、React等常见JS开发框架;
6、熟悉使用HBuilder、Webstorem 等IDE编辑器进行开发,并完成打包发布H5、小程序、安卓、ios版本app;
7、精通 Vue、uni-app 框架应用,并能运用uni-app框架完成移动端及小程序开发;
8、注重用户体验,具有快速迭代和敏捷开发思维,具备快速学习能力;
9、良好沟通能力、团队合作精神,积极主动、服从安排,能承受较大压力,责任心和学习能力强,能独立分析问题及解决问题;
10、对IOS,Android 原生有实际开发经验的加分;
11、对后台开发Node.js、Java等有开发经验的加分;

继续阅读 »

工作地点:河南郑州市中原区
学历:本科及以上学历
薪资范围:9K~13K*13薪
福利待遇:双休、五险一金、包午餐(四菜一汤一份水果)

职责描述:
1、负责基于H5、uni-App的手机APP 、小程序的设计与开发;
2、负责公司现有小程序、APP的开发、重构与优化;
3、参与公司级APP的发展方向的规划与设计;
4、参与APP研发技术的积累、学习、实践工作;
5、参与公司其他前端技术支持工作。

任职要求:
1、本科及以上学历,计算机、软件、设计等相关专业;
2、1年或以上手机端相关开发经验,一个以上项目跨平台APP开发经验;
3、精通符合W3C标准的Html5、JavaScript和CSS相关技术;
4、精通JSON、XML等通信格式以及基于AJAX请求实现与后台数据交互;
5、精通Vue、React等常见JS开发框架;
6、熟悉使用HBuilder、Webstorem 等IDE编辑器进行开发,并完成打包发布H5、小程序、安卓、ios版本app;
7、精通 Vue、uni-app 框架应用,并能运用uni-app框架完成移动端及小程序开发;
8、注重用户体验,具有快速迭代和敏捷开发思维,具备快速学习能力;
9、良好沟通能力、团队合作精神,积极主动、服从安排,能承受较大压力,责任心和学习能力强,能独立分析问题及解决问题;
10、对IOS,Android 原生有实际开发经验的加分;
11、对后台开发Node.js、Java等有开发经验的加分;

收起阅读 »