低代码可视化-uniapp气泡弹窗组件可视化-代码生成器

气泡弹窗组件是产品设计中常用的控件之一,以下是对uniapp气泡弹窗组件可视化的详细解析:

一、组件定义

气泡弹窗组件(diy-popover )指的是当触发某项操作时,在页面上方或特定位置展示的弹出层容器,容器内可展示文本、按钮、列表、标签、表单项等内容。组件库代码实现如下.

<template><view v-if="visibleSync" :style="[customStyle, {zIndex: uZindex - 1}]" class="diy-popover" :class="mask?'mask':''" hover-stop-propagation><u-mask v-if="mask" :blur="blur" :duration="duration" :custom-style="maskCustomStyle" :maskClickAble="maskCloseAble":z-index="uZindex - 2" :show="showDrawer && mask" @click="maskClick"></u-mask><!-- 移除	@tap.stop.prevent --><view class="popover" :class="[mask?'':'nomask',safeAreaInsetBottom ? 'safe-area-inset-bottom' : '',showDrawer ? 'diy-popover-visible' : '']" @touchmove.stop.prevent:style="getPositionStyle()" @click="closeByPopover"><text :class="['popover-'+diymode,'popover-'+dynPlace]" :style="{width:'0px',height:'0px'}"></text><slot></slot><view class="clearfix"></view></view></view>
</template><script>/*** popover 汽泡组件* @description 汽泡组件,用于汽泡组件、信息提示等内容,支持上、下、左、右和中部弹出。组件只提供容器,内部内容由用户自定义* @property {String} mode 弹出方向(默认left)* @property {Boolean} mask 是否显示遮罩(默认true)* @property {Stringr | Number} length mode=top * @property {Boolean} zoom 是否开启缩放动画,只在mode为center时有效(默认true)* @property {Boolean} safe-area-inset-bottom 是否开启底部安全区适配(默认false)* @property {Boolean} mask-close-able 点击遮罩是否可以关闭弹出层(默认true)* @property {Numberr | String} z-index 弹出内容的z-index值(默认1075)* @event {Function} open 弹出层打开* @event {Function} close 弹出层收起*/export default {name: 'diy-popover',emits: ["update:modelValue", "input", "open", "close"],props: {value: {type: Boolean,default: false},modelValue: {type: Boolean,default: false},/*** 弹出方向,left|right|top|bottom*/mode: {type: String,default: 'top-center'},initType:{type: String,default: ''},/*** 是否显示遮罩*/mask: {type: Boolean,default: true},// 是否开启底部安全区适配,开启的话,会在iPhoneX机型底部添加一定的内边距safeAreaInsetBottom: {type: Boolean,default: false},// 是否可以通过点击遮罩进行关闭maskCloseAble: {type: Boolean,default: true},// 是否可以通过点击内容区进行关闭contentCloseAble:{type: Boolean,default: false,},// 显示显示弹窗的圆角,单位rpxborderRadius: {type: [Number, String],default: 0},zIndex: {type: [Number, String],default: ''},// 背景颜色bgcolor: {type: String,default: '#fff'},// 点击元素左边坐标triggerLeft: {type: [String, Number],default: 0},// 点击元素上方坐标triggerTop: {type: [String, Number],default: 0},// 点击元素高度triggerHeight: {type: [String, Number],default: 12},// 点击元素宽度triggerWidth: {type: [String, Number],default: 24},width: {type: String,default: '200px'},// 遮罩的样式,一般用于修改遮罩的透明度maskCustomStyle: {type: Object,default () {return {backgroundColor: 'none'}}},// 遮罩打开或收起的动画过渡时间,单位msduration: {type: [String, Number],default: 250},// 遮罩的模糊度blur: {type: [String, Number],default: 0},},data() {return {statusBarHeight:0,diymode:this.mode,popoverTransform: 'scale(1)',popoverTop: '0px',popoverLeft: '0px',diybgcolor: this.bgcolor ? this.bgcolor : '#fff',visibleSync: false,showDrawer: false,timer: null,dynPlace: '',closeFromInner: false, // value的值改变,是发生在内部还是外部};},computed: {valueCom() {// #ifndef VUE3return this.value;// #endif// #ifdef VUE3return this.modelValue;// #endif},// 计算整理后的z-index值uZindex() {return this.zIndex ? this.zIndex : this.$u.zIndex.popup;}},watch: {valueCom(val) {if (val) {this.open();this.popoverPosition()} else if (!this.closeFromInner) {this.close();}this.closeFromInner = false;},},mounted() {if(this.mode.indexOf("-")>0){this.diymode = this.mode.substring(0,this.mode.indexOf("-"))}else{this.diymode = this.mode}// 组件渲染完成时,检查value是否为true,如果是,弹出popupif(this.valueCom){this.open()this.popoverPosition()}},methods: {getPositionStyle(){let style = {width:this.width,background:this.diybgcolor,'--arrow-color':this.diybgcolor};if(this.initType!=''){if(this.initType.indexOf("left") >= 0){style['left'] =  this.triggerLeft+'px'}if(this.initType.indexOf("right") >= 0){style['right'] = this.triggerLeft+'px'}if(this.initType.indexOf("top") >= 0){// #ifdef H5style['top'] = (this.statusBarHeight + this.triggerTop) +'px'// #endif// #ifndef H5style['top'] = this.triggerTop +'px'// #endif}if(this.initType.indexOf("bottom") >= 0){style['bottom'] = this.triggerTop+'px'}}else{style['top'] = this.popoverTopstyle['left'] = this.popoverLeft}return style},getTopOrBottomPlacement(wrapperwidth) {let width = uni.getSystemInfoSync().windowWidth//X坐标大于屏幕一半大小且大于屏幕的大小时if (this.triggerLeft + this.triggerWidth / 2 + wrapperwidth / 2 - width > 0) {return 'right'} else if (this.triggerLeft + this.triggerWidth / 2 - wrapperwidth / 2 > 0) {return 'center'} else {return 'left'}},getLeftOrRightPlacement(wrapperHeight) {let height = uni.getSystemInfoSync().windowHeightif (this.triggerTop + this.triggerHeight / 2 + wrapperHeight / 2 - height > 0) {return 'right'} else if (this.triggerTop + this.triggerHeight / 2 - wrapperHeight / 2 > 0) {return 'center'} else {return 'left'}},async popoverPosition() {let statusBar = await this.getStatusBar()statusBar = statusBar||0this.statusBarHeight = statusBar||0if(this.initType!=''){this.dynPlace = this.mode.indexOf("-")>0?this.mode:(this.mode+"-center")}else{let popoverDom = uni.createSelectorQuery().in(this).select(".popover")popoverDom.fields({size: true,}, (data) => {let width = data.widthlet height = data.heightlet y = this.triggerTop + statusBarlet x = this.triggerLeftthis.dynPlace = this.modeif (this.mode == 'top' || this.mode == 'bottom') {this.dynPlace = this.mode + "-" + this.getTopOrBottomPlacement(width)} else if (this.mode == 'left' || this.mode == 'right') {this.dynPlace = this.mode + "-" + this.getLeftOrRightPlacement(height)}else {this.dynPlace = this.mode}let popoverTop = 0let popoverLeft = 0switch (this.dynPlace) {case 'top-left':y = y + this.triggerHeight + 9popoverTop = `${y}px`x = x - 10x = x < 0 ? 2 : xpopoverLeft = `${x}px`this.popoverLeft = popoverLeftthis.popoverTop = popoverTopbreak;case 'top-center':y = y + this.triggerHeightpopoverTop = `${y+9}px`x = x + this.triggerWidth / 2 - width / 2x = x < 0 ? 2 : xpopoverLeft = `${x}px`this.popoverLeft = popoverLeftthis.popoverTop = popoverTopbreak;case 'top-right':y = y + this.triggerHeightthis.popoverTop = `${y+9}px`x = x + this.triggerWidth - widththis.popoverLeft = `${x}px`break;case 'top-left':this.popoverTop = `${y-12-height}px`x = x - 10x = x < 0 ? 2 : xthis.popoverLeft = `${x}px`break;case 'bottom-center':this.popoverTop = `${y-12-height}px`x = x + this.triggerWidth / 2 - width / 2x = x < 0 ? 2 : xpopoverLeft = `${x}px`this.popoverLeft = popoverLeftbreak;case 'bottom-right':this.popoverTop = `${y-12-height}px`x = x + this.triggerWidth - widththis.popoverLeft = `${x}px`break;case 'left-top':this.popoverTop = `${y}px`this.popoverLeft = `${x -width -15}px`break;case 'left-center':y = y - height / 2 + this.triggerHeight / 2this.popoverTop = `${y}px`this.popoverLeft = `${x -width -15}px`break;case 'left-bottom':y = y - height + this.triggerHeight + 5this.popoverTop = `${y}px`this.popoverLeft = `${x - width -15}px`break;case 'right-top':this.popoverTop = `${y}px`x = x + this.triggerWidth + 15this.popoverLeft = `${x}px`break;case 'right-center':y = y - height / 2 + this.triggerHeight / 2this.popoverTop = `${y}px`x = x + this.triggerWidth + 15this.popoverLeft = `${x}px`break;case 'right-bottom':y = y - height + this.triggerHeight + 5this.popoverTop = `${y}px`x = x + this.triggerWidth + 15this.popoverLeft = `${x}px`break;}}).exec();}},getStatusBar() {let promise = new Promise((resolve, reject) => {uni.getSystemInfo({success: function(e) {let customBar// #ifdef H5customBar = e.statusBarHeight + e.windowTop;// #endifresolve(customBar)}})})return promise},// 判断传入的值,是否带有单位,如果没有,就默认用rpx单位getUnitValue(val) {if (/(%|px|rpx|auto)$/.test(val)) return val;else return val + 'rpx'},//是否可以通过点击遮罩进行关闭closeByPopover(){if(this.contentCloseAble){this.close();}},// 遮罩被点击maskClick() {				this.close();},close() {// 标记关闭是内部发生的,否则修改了value值,导致watch中对value检测,导致再执行一遍close// 造成@close事件触发两次this.closeFromInner = true;this.change('showDrawer', 'visibleSync', false);},open() {this.change('visibleSync', 'showDrawer', true);},// 此处的原理是,关闭时先通过动画隐藏弹窗和遮罩,再移除整个组件// 打开时,先渲染组件,延时一定时间再让遮罩和弹窗的动画起作用change(param1, param2, status) {// 如果this.popup为false,意味着为picker,actionsheet等组件调用了popup组件if (this.popup == true) {this.$emit('input', status);}this.$emit("update:modelValue", status);this[param1] = status;if (status) {// #ifdef H5 || MPthis.timer = setTimeout(() => {this[param2] = status;this.$emit(status ? 'open' : 'close');}, 50);// #endif// #ifndef H5 || MPthis.$nextTick(() => {this[param2] = status;this.$emit(status ? 'open' : 'close');})// #endif} else {this.timer = setTimeout(() => {this[param2] = status;this.$emit(status ? 'open' : 'close');}, this.duration);}}}};
</script><style scoped lang="scss">@import "../../libs/css/style.components.scss";.diy-popover {/* #ifndef APP-NVUE */display: block;/* #endif */&.mask{position: fixed;top: 0;left: 0;right: 0;overflow: hidden;bottom: 0;}}.popover {position: absolute;&.nomask{position: fixed;}padding: 20rpx;z-index: 99999999;border-radius: 10rpx;display: flex;transition: opacity .15s, transform .15s;box-shadow: 0upx 0upx 30upx rgba(0, 0, 0, 0.2);.popover-top:after {content: "";position: absolute;border-width: 0 20rpx 20rpx;border-style: solid;border-color: transparent transparent var(--arrow-color);}.popover-top-left:after {top: -18rpx;left: 10rpx;}.popover-top-center:after {top: -18rpx;right: 50%;transform: translateX(50%);}.popover-top-right:after {top: -18rpx;right: 10rpx;}.popover-bottom:after {content: "";position: absolute;border-width: 20rpx 20rpx 0;border-style: solid;border-color: var(--arrow-color) transparent transparent;}.popover-bottom-left:after {bottom: -18rpx;left: 10rpx;}.popover-bottom-center:after {bottom: -18rpx;right: 50%;transform: translateX(50%);}.popover-bottom-right:after {bottom: -18rpx;right: 10rpx;}.popover-left:after {content: "";position: absolute;border-width: 20rpx 0 20rpx 20rpx;border-style: solid;border-color: transparent transparent transparent var(--arrow-color);}.popover-left-top:after {top: 10rpx;right: -18rpx;}.popover-left-center:after {top: 50%;right: -18rpx;transform: translateY(-50%);}.popover-left-bottom:after {bottom: 10rpx;right: -18rpx;}.popover-right:after {content: "";position: absolute;border-width: 20rpx 20rpx 20rpx 0;border-style: solid;border-color: transparent var(--arrow-color) transparent transparent;}.popover-right-top:after {top: 10rpx;left: -18rpx;}.popover-right-center:after {top: 50%;left: -18rpx;transform: translateY(-50%);}.popover-right-bottom:after {bottom: 10rpx;left: -18rpx;}}.diy-popover-visible {transform: translate3D(0px, 0px, 0px) !important;}
</style>

二、分类

根据弹出位置和设计手法的不同,气泡弹窗组件可以分为多种类型,例如模态弹窗和非模态弹窗。模态弹窗采用模态设计手法,将用户之前看到的内容与当前看到的内容进行区分,并需要用户通过明确的操作才能退出该模式。非模态弹窗则相对自由,不会打断用户的正常操作。

三、功能

气泡弹窗组件的主要功能包括:

  1. 告知用户信息:通过弹窗展示重要信息,提醒用户注意。
  2. 提醒用户操作:引导用户进行下一步操作,提高用户参与度。
  3. 加强用户互动:通过弹窗与用户进行交互,收集用户反馈或意见。

四、设计要点

在设计气泡弹窗组件时,需要注意以下几点:

  1. 明确弹窗目的:确保弹窗的内容清晰、简洁,能够准确传达信息或引导用户操作。
  2. 控制弹窗大小:避免弹窗过大,影响用户体验。同时,也要确保弹窗内容足够显眼,能够引起用户注意。
  3. 合理设置关闭按钮:给予用户关闭弹窗的权利,避免强制用户阅读或操作。关闭按钮的位置应便于用户点击,减少操作成本。
  4. 优化交互体验:确保弹窗的触发方式、显示方式以及消失方式都符合用户的使用习惯,提高用户体验。

五、在线设计

把弹窗组件拖进设计器。然后支持其他 组件往组件容器里拖进去,比如我们直接拖进宫格组件进去。

设置气泡弹窗组件属性。

由于气泡弹窗组件在默认运行时,不显示,需要点击来显示此组件,拖动任意一个按钮组件进设计器。

设置按钮点击事件

保存源码至本地查看组件效果。

六、生成的源码

<template><view class="container container329152"><button @tap="navigateTo" data-type="openPopover" data-id="btn-popover" id="btn-popover" class="diygw-col-24 btn-clz diygw-btn-default">按钮</button><diy-popover v-model="popoverData.show" width="200px" bgcolor="#fff" mode="top" :triggerLeft="popoverData.left" :triggerTop="popoverData.top" :triggerWidth="popoverData.width" :triggerHeight="popoverData.height"><view class="flex flex-content diygw-col-24"><view class="flex diygw-col-24"><view class="diygw-grid col-3"><view class="diygw-grid-item"><view class="diygw-grid-inner"><view class="diygw-grid-icon diygw-avatar"><image mode="aspectFit" class="diygw-avatar-img" src="/static/global/grid1.png"></image></view><view class="diygw-grid-title"> 菜单一 </view></view></view><view class="diygw-grid-item"><view class="diygw-grid-inner"><view class="diygw-grid-icon diygw-avatar"><image mode="aspectFit" class="diygw-avatar-img" src="/static/global/grid2.png"></image></view><view class="diygw-grid-title"> 菜单二 </view></view></view><view class="diygw-grid-item"><view class="diygw-grid-inner"><view class="diygw-grid-icon diygw-avatar"><image mode="aspectFit" class="diygw-avatar-img" src="/static/global/grid3.png"></image></view><view class="diygw-grid-title"> 菜单三 </view></view></view><view class="diygw-grid-item"><view class="diygw-grid-inner"><view class="diygw-grid-icon diygw-avatar"><image mode="aspectFit" class="diygw-avatar-img" src="/static/global/grid4.png"></image></view><view class="diygw-grid-title"> 菜单四 </view></view></view><view class="diygw-grid-item"><view class="diygw-grid-inner"><view class="diygw-grid-icon diygw-avatar"><image mode="aspectFit" class="diygw-avatar-img" src="/static/grid5.png"></image></view><view class="diygw-grid-title"> 菜单五 </view></view></view><view class="diygw-grid-item"><view class="diygw-grid-inner"><view class="diygw-grid-icon diygw-avatar"><image mode="aspectFit" class="diygw-avatar-img" src="/static/grid6.png"></image></view><view class="diygw-grid-title"> 菜单六 </view></view></view></view></view></view></diy-popover><view class="clearfix"></view></view>
</template><script>export default {data() {return {//用户全局信息userInfo: {},//页面传参globalOption: {},//自定义全局变量globalData: {},listNum: 1,list: {code: 200,msg: '获取数据成功',data: [{title: '标题1',remark: '描述1',id: 1,attr: {title: '标题1'},img: 'https://php.diygw.com/logo.png'},{title: '标题2',remark: '描述2',id: 2,attr: {title: '标题2'},img: 'https://php.diygw.com/logo.png'},{title: '标题3',remark: '描述3',id: 3,attr: {title: '标题3'},img: 'https://php.diygw.com/logo.png'},{title: '标题4',remark: '描述4',id: 4,attr: {title: '标题4'},img: 'https://php.diygw.com/logo.png'},{title: '标题5',remark: '描述5',id: 5,attr: {title: '标题5'},img: 'https://php.diygw.com/logo.png'},{title: '标题6',remark: '描述6',id: 6,attr: {title: '标题6'},img: 'https://php.diygw.com/logo.png'},{title: '标题7',remark: '描述7',id: 7,attr: {title: '标题7'},img: 'https://php.diygw.com/logo.png'},{title: '标题8',remark: '描述8',id: 8,attr: {title: '标题8'},img: 'https://php.diygw.com/logo.png'},{title: '标题9',remark: '描述9',id: 9,attr: {title: '标题9'},img: 'https://php.diygw.com/logo.png'},{title: '标题10',remark: '描述10',id: 10,attr: {title: '标题10'},img: 'https://php.diygw.com/logo.png'}]},popoverData: {left: 0,top: 10,height: 0,width: 0,show: false}};},onPageScroll(e) {const scrollTop = e.scrollTop;this.headerBackgroundStyle = this.headerBackgroundStyle || { background: 'none' };if (scrollTop <= 80) {const opacity = scrollTop / 100;const color = `rgba(255, 255, 255, ${opacity})`;this.headerBackgroundStyle.background = color;} else {this.headerBackgroundStyle.background = '#ffffff';}},onShow() {this.setCurrentPage(this);},onLoad(option) {this.setCurrentPage(this);if (option) {this.setData({globalOption: this.getOption(option)});}this.init();},methods: {async init() {await this.listApi();},// 列表数据 API请求方法async listApi(param) {let thiz = this;param = param || {};//如果请求要重置页面,请配置点击附加参数refresh=1  增加判断如输入框回调param不是对象if (param.refresh || typeof param != 'object') {this.listNum = 1;}//请求地址及请求数据,可以在加载前执行上面增加自己的代码逻辑let http_url = 'https://php.diygw.com/article.php';let http_data = {pageNum: this.listNum,pageSize: 10,sctdown: param.sctdown || this.sctdown};let http_header = {};let list = await this.$http.post(http_url, http_data, http_header, 'json');let datarows = list.rows;if (http_data.pageNum == 1) {this.list = list;} else if (datarows) {let rows = this.list.rows.concat(datarows);list.rows = rows;this.list = list;}if (datarows && datarows.length > 0) {this.listNum = this.listNum + 1;}this.globalData.isshow = true;console.log(http_data.sctdown);},openPopover(evt) {let view = uni.createSelectorQuery().in(this);view.select('#' + evt.id).boundingClientRect();view.exec((data) => {if (data && data.length > 0 && data[0]) {this.popoverData.left = data[0].left;this.popoverData.top = data[0].top;this.popoverData.height = data[0].height;this.popoverData.width = data[0].width;this.popoverData.show = true;}});},closePopover(evt) {this.popoverData.show = false;}},onPullDownRefresh() {// 列表数据 API请求方法this.listNum = 1;this.listApi();uni.stopPullDownRefresh();},onReachBottom() {// 列表数据 API请求方法this.listApi();}};
</script><style lang="scss" scoped>.btn-clz {padding-top: 20rpx;border-bottom-left-radius: 12rpx;color: #fff;padding-left: 20rpx;padding-bottom: 20rpx;border-top-right-radius: 12rpx;margin-right: 10rpx;background-color: #07c160;margin-left: 10rpx;overflow: hidden;width: calc(100% - 10rpx - 10rpx) !important;border-top-left-radius: 12rpx;margin-top: 10rpx;border-bottom-right-radius: 12rpx;margin-bottom: 10rpx;text-align: center;padding-right: 20rpx;}.diygw-dialog-popover {}.container329152 {}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/14281.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Unity3D学习FPS游戏(11)敌人AI巡逻(NavMesh)

前言&#xff1a;前面两篇博客已经实现了简单的敌人&#xff0c;但是呢&#xff0c;这样很无趣。因为敌人只会站在原地被攻击&#xff0c;所以本篇我们将实现敌人AI巡逻&#xff0c;让敌人动起来。 敌人AI巡逻 场景丰富一下导航网格NavMesh构建导航网格导航网格优化玩家被当作…

遇到“msvcr120.dll丢失”要怎么解决?详解msvcr120.dll的解决方法

遇到“msvcr120.dll丢失”错误通常表明你的系统缺少一个关键的DLL文件&#xff0c;这是Microsoft Visual C 2013的一部分。这个问题可能导致某些程序无法运行&#xff0c;影响电脑性能。不过&#xff0c;解决这一问题并不复杂。接下来&#xff0c;本文将向你展示几种简单的修复…

git相关知识

前言&#xff1a;在学习git之前首先需要了解几个概念&#xff1a;工作区&#xff0c;暂存区&#xff0c;版本库。 工作区&#xff1a;是电脑上写代码或者文件的目录。 暂存区&#xff1a;一般存放在.git目录下的index中&#xff0c;也称索引。&#xff08;git add&#xff09…

Spring Boot项目的配置文件有哪些?加载优先级谁最高?配置优先级谁最高?

目录 一. 结论 二. .prperties、.yml、.yaml 文件类型简介及注意点 2.1 文件简介 2.2. .prperties&#xff08;默认格式/传统格式&#xff09; 2.3 application.yml&#xff08;主流格式&#xff09; 2.4 application.yaml&#xff08;主流格式&#xff09; 2.5 配置文件…

蓝牙眼镜WT6900HA语音控制芯片方案:开启智能穿戴新篇章

前言&#xff1a; 随着科技的飞速发展&#xff0c;智能穿戴设备已经逐渐融入我们的日常生活。从智能手表到智能手环&#xff0c;再到如今的智能蓝牙眼镜&#xff0c;这些设备不仅改变了我们的生活方式&#xff0c;更引领了一场科技革命。 今天&#xff0c;我们要为大家介绍一款…

项目管理【02】项目开发完整指南

移动端项目开发完整指南&#xff1a;从需求到上线 在移动应用开发过程中&#xff0c;一个项目从最初的需求到最终上线&#xff0c;需要经过多个关键阶段。本文将详细介绍整个开发流程中的最佳实践&#xff0c;帮助开发团队更高效地完成项目。 一、准备阶段 项目启动前的准备工…

快手直播间采集教程,快手引流,快手截流,截流工具,直播间截流,快手直播间采集,获客系统,获客软件

功能&#xff1a; 1.输入快手直播间链接可一键监控直播间 2.可采集新进直播间的人 3.可采集直播间所有动作&#xff0c;包含&#xff1a;发弹幕的人和内容、送礼物的人和送的礼物、点亮爱心的人 4.可一键导出新进直播间的快手ID 5.可一键导出直播间动作列表&#xff0c;也可以筛…

sol机器人pump机器人如何实现盈利的?什么是Pump 扫链机器人?

什么是Pump 扫链机器人&#xff0c;它的盈利逻辑优化策略是什么&#xff1f; Pump 扫链机器人&#xff0c;通过智能化、自动化的买卖操作帮助投资者实现快速盈利。在此基础上&#xff0c;我们对该机器人的盈利逻辑进行了深度优化&#xff0c;涵盖了买入策略和止盈策略的各个方面…

【vue2】13.自定义指令

目录 自定义指令 自定义指令的作用? 自定义指令的使用步骤? 1. 注册 (全局注册 或 局部注册) 2. 标签上 v-指令名 使用 自定义指令 - 指令的值 1. 通过指令的值相关语法&#xff0c;可以应对更复杂指令封装场景 2. 指令值的语法&#xff1a; 自定义指令 - v-loading…

【LLM】Agent的相关Benchmark

note 文章目录 note一、SuperCLUE-Agent二、AgentBench三、跨系统benchmark&#xff1a;CRAB四、SWE-bench 一、SuperCLUE-Agent SuperCLUE-Agent是一个 Agent智能体中文原生任务能力测评基准&#xff0c;评估方面包括&#xff1a; 工具使用能力&#xff08;调用API、检索API、…

MATLAB用CNN-LSTM神经网络的语音情感分类深度学习研究

全文链接&#xff1a;https://tecdat.cn/?p38258 原文出处&#xff1a;拓端数据部落公众号 在语音处理领域&#xff0c;对语音情感的分类是一个重要的研究方向。本文将介绍如何通过结合二维卷积神经网络&#xff08;2 - D CNN&#xff09;和长短期记忆网络&#xff08;LSTM&…

机器学习基础03

目录 1.KNN算法-分类 1.1样本距离判断 1.1.1欧式距离 1.1.2曼哈顿距离 1.2KNN 算法原理 1.3KNN缺点 1.4API 2.模型选择与调优 2.1保留交叉验证 2.2K-折交叉验证 2.3分层k-折交叉验证Stratified k-fold 2.4其它验证 2.5API 3.模型保存与加载 3.1保存模型 3.2加…

【go从零单排】go语言中testing的几种类型

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 Go 语言中的 testing 包是用于编写和运行测试的标准库。它提供了丰富的功能&…

[笔记]自动化中破解验证码

01需求分析 1.打开一个chrome浏览器 2.输入论坛的网址: http://114.116.2.138:8090/forum.php 3.输入用户名admin 4.输入密码123456 5.点击登录 6.输入验证码 7.再点击登录 02准备工作 selenium环境搭建 参考地址: https://blog.csdn.net/python_jeff/article/details…

2024下半年软考系统架构设计师案例分析题试题与答案

解析中包含所有真题图片 解析中包含所有真题图片 解析中包含所有真题图片 解析中包含所有真题图片 第一题 解析见&#xff08;点我&#xff09;&#xff1a;https://blog.csdn.net/u014624241/article/details/143701384 第二题 解析见&#xff08;点我&#xff09;&#…

使用 Python 和 Selenium 解决 hCaptcha:完整指南

如果你跟我一样&#xff0c;你可能也曾遇到过在抓取数据或自动化任务时试图绕过 hCaptcha 的挫折感。你懂的&#xff0c;hCaptcha 弹出来&#xff0c;你的脚本就戛然而止。但别担心&#xff01;我们都经历过。好消息是&#xff0c;用 Python 和 Selenium 解决 hCaptcha 挑战并不…

[HAOI2015] 树上染色(树形 DP)

题目传送门https://www.luogu.com.cn/problem/P3177 解题思路 设 表示以 为根的子树染 个黑点的最大收益值。 设一共有 个节点&#xff0c;要染 个点。 完成 DP 状态的设计后&#xff0c;开始推导转移方程…… 对于一个点 &#xff0c;它下面有一条通向 &#xff0c;权…

Python学习从0到1 day28 Python 高阶技巧 ⑧ 递归

那就祝我们爬不同的山&#xff0c;还能回到同一条路上&#xff0c;不是时时见面&#xff0c;但是时时惦记之人 —— 24.11.13 递归 1.什么是递归 递归在编程中是一种非常重要的算法 递归&#xff1a;即方法(函数)自己调用自己的一种特殊编程写法 函数调用自己&#xff0c;即…

代码随想录算法训练营第二十二天|491.递增子序列、46.全排列、47.全排列 II

491.递增子序列 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a;回溯算法精讲&#xff0c;树层去重与树枝去重 | LeetCode&#xff1a;491.递增子序列_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦…

二叉树的最大深度

给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;root [1,null,2] 输出…