小程序学习 1

pages/goods/search/home.wxml首页功能设定


1. loading入场
2. 下拉刷新
3. 搜索栏
4. 分类切换
5. 商品列表
6. 规格弹层
7. 加载更多

<view style="text-align: center; color: #b9b9b9" wx:if="{{pageLoading}}"><t-loading theme="circular" size="40rpx" text="加载中..." inherit-color />
</view>
<view class="home-page-header"><view class="search" bind:tap="navToSearchPage"><t-searcht-class-input="t-search__input"t-class-input-container="t-search__input-container"placeholder="iphone 13 火热发售中"leftIcon=""disabled><t-icon slot="left-icon" prefix="wr" name="search" size="40rpx" color="#bbb" /></t-search></view><view class="swiper-wrap"><t-swiperwx:if="{{imgSrcs.length > 0}}"current="{{current}}"autoplay="{{autoplay}}"duration="{{duration}}"interval="{{interval}}"navigation="{{navigation}}"imageProps="{{swiperImageProps}}"list="{{imgSrcs}}"bind:click="navToActivityDetail"/></view>
</view>
<view class="home-page-container"><view class="home-page-tabs"><t-tabst-class="t-tabs"t-class-active="tabs-external__active"t-class-item="tabs-external__item"defaultValue="{{0}}"space-evenly="{{false}}"bind:change="tabChangeHandle"><t-tab-panelwx:for="{{tabList}}"wx:for-index="index"wx:key="index"label="{{item.text}}"value="{{item.key}}"/></t-tabs></view><goods-listwr-class="goods-list-container"goodsList="{{goodsList}}"bind:click="goodListClickHandle"bind:addcart="goodListAddCartHandle"/><load-more list-is-empty="{{!goodsList.length}}" status="{{goodsListLoadStatus}}" bind:retry="onReTry" /><t-toast id="t-toast" />
</view>
1 <view class="search" bind:tap="navToSearchPage"> 中:的作用是什么

在小程序中,<view> 是一个基本的组件,用于在页面中创建一个视图容器。它类似于HTML中的<div>元素,可以用来包裹其他小程序组件或者作为布局的容器。

在你提到的代码中,class="search" 是给<view>元素添加了一个名为"search"的CSS类。通过CSS类,你可以对该元素进行样式的设置,例如修改背景颜色、字体大小等。

bind:tap="navToSearchPage" 是给<view>元素绑定了一个点击事件,当用户点击该元素时,会触发名为"navToSearchPage"的事件处理函数。你可以在对应的页面或组件中定义该事件处理函数,并在函数中编写相应的逻辑代码。

通常情况下,“navToSearchPage” 事件会与一个函数绑定,当用户点击元素时,该函数会被调用执行相应的逻辑。这样可以实现在用户点击某个元素时,跳转到搜索页面的功能。

在小程序中,tap 事件是最常用的触摸事件之一,它可以用于绑定在按钮、图片、文字等元素上。当用户点击这些元素时,就会触发 tap 事件。

拓展一下,除了 tap 事件外,小程序还支持其他触摸事件,如 longpress(长按)、touchstart(手指触摸开始)、touchmove(手指触摸移动)等。这些事件可以根据具体需求进行绑定和使用,以实现更多交互效果。

wx.navigateTo(Object object) | 微信开放文档

保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层。

bind:submit="handleSubmit"是一种在前端开发中常见的绑定事件的方式。它通常用于表单提交时触发相应的处理函数。具体来说,"bind:submit"表示将一个名为"handleSubmit"的函数与表单的提交事件进行绑定。

当用户在表单中点击提交按钮或按下回车键时,绑定的"handleSubmit"函数将被调用。这个函数可以执行一些逻辑,比如验证表单数据、发送请求等。通过这种方式,我们可以实现对表单提交事件的自定义处理。

bind 在 小程序中

在小程序中,bind是一个用于事件绑定的关键字。通过bind可以将某个事件与对应的处理函数进行绑定,当该事件触发时,绑定的处理函数将被调用。

在小程序中,可以使用bind关键字来绑定各种事件,例如bindtap、bindinput、bindchange等。这些事件可以对应不同的组件,比如按钮的点击事件、输入框的输入事件、选择器的值改变事件等。

使用bind关键字进行事件绑定的语法如下: <view bindtap=“handleTap”></view>

其中,bindtap表示要绑定的事件名称,handleTap是对应的处理函数。当用户点击了该view组件时,handleTap函数将被调用。

需要注意的是,bind关键字绑定的事件是非捕获型事件,即事件从子节点向父节点冒泡触发。如果需要使用捕获型事件,可以使用catch关键字进行绑定。

<t-swiper>

<t-swiper>是一个小程序组件,用于实现轮播图功能。它具有以下属性和事件:

  1. wx:if=“{{imgSrcs.length > 0}}”: 用于判断是否有图片数据,如果有则显示轮播图组件。
  2. current=“{{current}}”: 当前显示的图片索引。
  3. autoplay=“{{autoplay}}”: 是否自动播放轮播图。
  4. duration=“{{duration}}”: 图片切换动画的时长。
  5. interval=“{{interval}}”: 图片切换的时间间隔。
  6. navigation=“{{navigation}}”: 是否显示导航指示器。
  7. imageProps=“{{swiperImageProps}}”: 图片的额外属性,可以用于设置图片的样式等。
  8. list=“{{imgSrcs}}”: 轮播图的图片列表,可以是一个数组,每个元素代表一张图片的路径。
  9. bind:click=“navToActivityDetail”: 点击轮播图时触发的事件,可以在事件处理函数中进行跳转到详情页等操作。

swiper | 微信开放文档   

<t-swiper> 自定义组件

微信小程序自定义组件(超详细)-CSDN博客

在页面xxx.json UsingComponent中注册,是以键值对的形式,前面的键就是我们创建的组件标签名,后面是url路径

pages/home/home.json

{"navigationBarTitleText": "首页","onReachBottomDistance": 10,"backgroundTextStyle": "light","enablePullDownRefresh": true,"usingComponents": {"t-search": "tdesign-miniprogram/search/search","t-loading": "tdesign-miniprogram/loading/loading","t-swiper": "tdesign-miniprogram/swiper/swiper","t-swiper-nav": "tdesign-miniprogram/swiper-nav/swiper-nav","t-image": "/components/webp-image/index","t-icon": "tdesign-miniprogram/icon/icon","t-toast": "tdesign-miniprogram/toast/toast","t-tabs": "tdesign-miniprogram/tabs/tabs","t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel","goods-list": "/components/goods-list/index","load-more": "/components/load-more/index"}
}

miniprogram_npm/tdesign-miniprogram/swiper/swiper

pages/home/home.wxss

page {box-sizing: border-box;padding-bottom: calc(env(safe-area-inset-bottom) + 96rpx);
}.t-tabs.t-tabs--top .t-tabs__scroll {border-bottom: none !important;
}.home-page-header {background: linear-gradient(#fff, #f5f5f5);
}.home-page-container {background: #f5f5f5;
}.home-page-container,
.home-page-header {display: block;padding: 0 24rpx;
}.home-page-header .t-search__input-container {border-radius: 32rpx !important;height: 64rpx !important;
}.home-page-header .t-search__input {font-size: 28rpx !important;color: rgb(116, 116, 116) !important;
}.home-page-header .swiper-wrap {margin-top: 20rpx;
}.home-page-header .t-image__swiper {width: 100%;height: 300rpx;border-radius: 10rpx;
}.home-page-container .t-tabs {background: #f5f5f5 !important;
}.home-page-container .t-tabs .t-tabs-nav {background-color: transparent;line-height: 80rpx;font-size: 28rpx;color: #333;
}.home-page-container .t-tabs .t-tabs-scroll {border: none !important;
}/* 半个字 */
.home-page-container .tab.order-nav .order-nav-item.scroll-width {min-width: 165rpx;
}
.home-page-container .tab .order-nav-item.active {color: #fa550f !important;
}.home-page-container .tab .bottom-line {border-radius: 4rpx;
}.home-page-container .tab .order-nav-item.active .bottom-line {background-color: #fa550f !important;
}.home-page-container .tabs-external__item {/* color: #666 !important; */font-size: 28rpx;
}.home-page-container .tabs-external__active {color: #333333 !important;font-size: 32rpx;
}.home-page-container .tabs-external__track {/* background-color: #fa4126 !important; */height: 6rpx !important;border-radius: 4rpx !important;width: 48rpx !important;
}.t-tabs.t-tabs--top .t-tabs__item,
.t-tabs.t-tabs--bottom .t-tabs__item {height: 86rpx !important;
}.home-page-container .goods-list-container {background: #f5f5f5 !important;margin-top: 16rpx;
}.home-page-tabs {--td-tab-nav-bg-color: transparent;--td-tab-border-color: transparent;--td-tab-item-color: #666;--td-tab-track-color: red;
}
问题1: margin-top:20rpx;

margin-top: 20rpx; 是一种CSS样式属性,用于设置元素的上边距(即元素与其上方元素之间的距离)。其中,rpx是一种相对单位,表示相对于屏幕宽度的1/750。具体来说,20rpx表示元素的上边距为屏幕宽度的1/750乘以20。

问题2: box-sizing: border-box;

box-sizing: border-box; 是CSS中的一个属性,用于设置元素的盒模型。当设置为border-box时,元素的宽度和高度包括了边框和内边距,而不会受到内容区域的影响

具体来说,当设置为border-box时,元素的总宽度和高度等于设置的宽度和高度加上边框和内边距的宽度。这样可以更方便地控制元素的尺寸,特别是在使用百分比或者响应式布局时非常有用。

举个例子,如果一个元素的宽度设置为200px,边框宽度为2px,内边距为10px,那么元素的实际宽度将会是200px,而不是将内容区域的宽度加上边框和内边距。

问题3:  padding-bottom: calc(env(safe-area-inset-bottom) + 96rpx);

padding-bottom: calc(env(safe-area-inset-bottom) + 96rpx) 是一种CSS样式属性,用于设置元素的底部内边距。它的计算方式是将环境变量 safe-area-inset-bottom 的值与 96rpx 相加。

safe-area-inset-bottom 是一个环境变量,用于表示设备屏幕底部的安全区域的大小。在一些全面屏手机上,屏幕底部可能存在一些特殊的区域,例如虚拟导航栏或手势操作区域,为了避免内容被遮挡,可以使用 safe-area-inset-bottom 来获取这个安全区域的大小。

96rpx 是一个相对单位,表示相对于屏幕宽度的像素值。在小程序开发中,可以使用 rpx 单位来实现屏幕适配,其中 1rpx 约等于屏幕宽度的 1/750

综合起来,padding-bottom: calc(env(safe-area-inset-bottom) + 96rpx) 的作用是在元素的底部设置一个内边距,这个内边距的大小由设备的安全区域和 96rpx 决定。

问题4: padding-bottom: calc(env(safe-area-inset-bottom) + 96rpx); 中 calc 是什么意思 env 是什么意思

在CSS中,padding-bottom属性用于设置元素的底部内距。而padding-bottom属性值中的calc()函数是用来进行数学计算的。

calc()函数可以在CSS中进行简单的数学计算,它接受一个表达式作为参数,并返回计算结果。在这个表达式中,可以使用加法、减法、乘法和除法等基本运算符。

env()函数是CSS中的一个函数,用于获取环境变量的值。在这个例子中,env(safe-area-inset-bottom)表示获取名为safe-area-inset-bottom的环境变量的值。

综合起来,padding-bottom: calc(env(safe-area-inset-bottom) + 96rpx) 的意思是设置元素的底部内边距为safe-area-inset-bottom环境变量的值加上96rpx。这样可以根据环境变量的不同,在不同设备上动态调整元素的底部内边距。

问题5: rpx 是什么英文的缩写

"rpx"是CSS中的一个单位,它是相对像素(Relative Pixel)的缩写。rpx单位主要用于微信小程序开发中,用于适配不同屏幕尺寸的设备。在不同的设备上,1rpx会根据屏幕宽度进行换算,以保证在不同设备上显示的大小基本一致。

问题6: border-bottom: none !important;

border-bottom: none !important; 是一种CSS样式规则,用于设置元素的底部边框为无边框,并且使用!important关键字来强制覆盖其他可能存在的样式设置。

具体解释如下:

  • border-bottom: none; 表示将元素的底部边框设置为无边框,即没有边框线。
  • !important 是一个CSS优先级的标记,用于强制覆盖其他可能存在的样式设置。当多个样式规则同时应用于同一个元素时,使用!important可以确保该样式规则具有最高的优先级。
问题7:  display: block;

display  v n     展览 陈列 显示  显示方式 
display: block; 是CSS中的一个属性,用于设置元素显示方式为块级元素块级元素会独占一行,并且默认情况下会撑满父容器的宽度。

块级元素的特点包括:

  1. 独占一行:每个块级元素都会从新的一行开始显示,相邻的块级元素会分别显示在不同的行上。
  2. 默认宽度为父容器宽度:块级元素的宽度默认会自动填充满父容器的宽度,除非显式设置了宽度。
  3. 可以设置宽度和高度:块级元素可以通过设置宽度和高度来调整其尺寸。
  4. 可以设置内外边距:块级元素可以通过设置内外边距来调整与其他元素之间的间距。
  5. 可以包含其他块级元素和内联元素:块级元素可以包含其他块级元素和内联元素。
问题8:   --td-tab-nav-bg-color: transparent;

transparent  美/trænsˈpærənt/ adj.
透明的,清澈的;(过程、活动或组织)透明的,公开的;明显的,一目了然的;(谎言或借口)易识破的;(思想、情感、动机)易被人所知的;(计算机)(过程、界面)透明的;(物理)可穿透的,(热、电磁波)可通过的

–td-tab-nav-bg-color: transparent; 是一种CSS样式属性,用于选项卡导航栏的背景颜色为透明。通过设置该属性,可以使选项卡导航栏的背景透明,从而实现更加灵活和自定义的界面效果。

pages/goods/search/index.wxml

<view class="search-page"><t-searcht-class-input-container="t-class__input-container"t-class-input="t-search__input"value="{{searchValue}}"leftIcon=""placeholder="iPhone12pro"bind:submit="handleSubmit"focus><t-icon slot="left-icon" prefix="wr" name="search" size="40rpx" color="#bbb" /></t-search><view class="search-wrap"><view class="history-wrap"><view class="search-header"><text class="search-title">历史搜索</text><text class="search-clear" bind:tap="handleClearHistory">清除</text></view><view class="search-content"><viewclass="search-item"hover-class="hover-history-item"wx:for="{{historyWords}}"bind:tap="handleHistoryTap"bindlongpress="deleteCurr"data-index="{{index}}"wx:key="*this">{{item}}</view></view></view><view class="popular-wrap"><view class="search-header"><text class="search-title">热门搜索</text></view><view class="search-content"><viewclass="search-item"hover-class="hover-history-item"wx:for="{{popularWords}}"bind:tap="handleHistoryTap"data-index="{{index}}"wx:key="*this">{{item}}</view></view></view></view><t-dialogvisible="{{dialogShow}}"content="{{dialog.message}}"bindconfirm="confirm"bind:close="close"confirm-btn="确定"cancel-btn="{{dialog.showCancelButton ? '取消' : null}}"t-class-confirm="dialog__button-confirm"t-class-cancel="dialog__button-cancel"/>
</view>
问题1: focus的作用
  <t-searcht-class-input-container="t-class__input-container"t-class-input="t-search__input"value="{{searchValue}}"leftIcon=""placeholder="iPhone12pro"bind:submit="handleSubmit"focus>

在给定的代码中,focus属性的作用是将输入框设置为自动获取焦点。当页面加载完成后,输入框会自动获得焦点,用户可以直接开始输入内容,而无需手动点击输入框。这可以提高用户的使用体验,特别是在需要频繁输入内容的情况下。

services/home/home.js


/** 获取首页数据 */
function mockFetchHome() {const { delay } = require('../_utils/delay');const { genSwiperImageList } = require('../../model/swiper');return delay().then(() => {return {swiper: genSwiperImageList(),tabList: [{text: '精选推荐',key: 0,},{text: '夏日防晒',key: 1,},{text: '二胎大作战',key: 2,},{text: '人气榜',key: 3,},{text: '好评榜',key: 4,},{text: 'RTX 30',key: 5,},{text: '手机也疯狂',key: 6,},],activityImg: `${cdnBase}/activity/banner.png`,};});
}/** 获取首页数据 */
export function fetchHome() {if (config.useMock) {return mockFetchHome();}return new Promise((resolve) => {resolve('real api');});
}

这段代码是一个JavaScript模块,它导入了configcdnBase变量,并且定义了一个名为fetchHome的函数。该函数根据config.useMock的值来判断是否使用模拟数据。如果config.useMocktrue,则调用mockFetchHome函数返回模拟数据;如果为false,则返回一个Promise对象,该Promise对象在解析时返回字符串’real api’。

问题1: Promise对象 是什么

Promise对象是JavaScript中用于处理异步操作的一种机制。它代表了一个尚未完成但最终会完成的操作,并可以获取其结果或错误信息。

JavaScript Promise | 菜鸟教程

Promise对象有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。当一个Promise对象处于pending状态时,可以通过调用resolve函数将其状态改变为fulfilled,表示操作成功完成;或者通过调用reject函数将其状态改变为rejected,表示操作失败。

Promise对象可以通过链式调用的方式处理多个异步操作。通过调用then方法,可以指定在Promise对象状态变为fulfilled时执行的回调函数;通过调用catch方法,可以指定在Promise对象状态变为rejected时执行的回调函数。

Promise对象的优点在于可以避免回调地狱(callback hell)的问题,使异步代码更加清晰和易于理解。

问题2: return new Promise((resolve) => {resolve('real api');}); 中各符号的作用分别是什么。

在这段代码中,符号的含义如下:

  1. return:表示将一个值返回给调用者。在这里,它将返回一个Promise对象。
  2. new:表示创建一个新的对象实例。在这里,它创建了一个Promise对象的实例。
  3. Promise:表示一个异步操作的结果。它可以是一个成功的值或一个失败的原因。
  4. (resolve) => {...}:表示一个回调函数,它接收一个参数resolve。在这里,它是Promise构造函数的参数,用于解决(或完成)Promise并返回结果。

../_utils/delay

export function delay(ms = 200) {return new Promise((resolve) => setTimeout(resolve, ms));
}

这是一个用于延迟执行的函数。它使用了Promise和setTimeout来实现延迟。函数的参数ms表示延迟的毫秒数,默认为200毫秒。在延迟结束后,Promise会被解析(resolve)

问题1: export 的作用是什么

在JavaScript中,export关键字用于将函数、变量、类或模块等内容导出,使其可以在其他文件中使用。在给定的代码中,export用于导出一个名为delay的函数。

通过使用export关键字,我们可以将delay函数暴露给其他文件,以便在其他地方使用它。这样,其他文件就可以通过导入该模块来访问和调用delay函数。

../../model/swiper

const images = ['https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner1.png','https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner2.png','https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner3.png','https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner4.png','https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner5.png','https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner6.png',
];export function genSwiperImageList() {return images;
}

问题1: genSwiperImageList 是什么样的函数?

这是一个JavaScript函数,名为genSwiperImageList,它的作用是生成一个轮播图的图片列表。函数内部使用了一个变量images来存储图片列表,并通过return语句将其返回。

小程序中的app.js

在小程序中,app.js是整个小程序的入口文件,它负责全局的初始化和配置。下面是对app.js的简要介绍:

  1. 注册小程序:在app.js中,我们需要调用App()函数来注册小程序,并传入一个对象作为参数。这个对象包含了小程序的生命周期函数、全局数据和全局方法等。

  2. 生命周期函数:app.js中定义了一些生命周期函数,用于在小程序的不同阶段执行相应的操作。常见的生命周期函数包括onLaunch(小程序初始化时执行)、onShow(小程序启动或从后台进入前台时执行)和onHide(小程序从前台进入后台时执行)等。

  3. 全局数据和方法:在app.js中,我们可以定义全局的数据和方法,这些数据和方法可以在小程序的所有页面中使用。通过在App()函数的参数对象中定义globalData属性,我们可以创建全局数据。而通过在App()函数的参数对象中定义其他方法,我们可以创建全局方法。

  4. 全局配置:在app.js中,我们可以进行一些全局配置,例如设置小程序的窗口样式、配置网络请求等。通过在App()函数的参数对象中定义window属性,我们可以设置小程序的窗口样式。而通过在App()函数的参数对象中定义onLaunch生命周期函数中调用wx.request()等方法,我们可以进行网络请求的配置。

import updateManager from './common/updateManager';App({onLaunch: function () {},onShow: function () {updateManager();},
});

小程序中的app.json

在小程序开发中,app.json是小程序的全局配置文件,用于配置小程序的全局属性和页面路径等信息。下面是app.json的一些常用配置项:

  1. “pages”:配置小程序的页面路径列表,可以在这里定义小程序的所有页面。例如:“pages”:[“pages/index/index”, “pages/detail/detail”]。

  2. “window”:配置小程序的窗口表现,包括窗口背景色、导航栏样式等。例如:“window”:{“navigationBarBackgroundColor”: “#ffffff”,“navigationBarTextStyle”: “black”}。

  3. “tabBar”:配置小程序的底部导航栏,可以在这里定义底部导航栏的样式和页面路径。例如:“tabBar”:{“list”:[{“pagePath”:“pages/index/index”,“text”:“首页”},{“pagePath”:“pages/mine/mine”,“text”:“我的”}]}。

  4. “networkTimeout”:配置小程序的网络超时时间,可以设置请求超时时间和下载文件超时时间。例如:“networkTimeout”:{“request”: 5000,“downloadFile”: 10000}。

  5. “debug”:配置小程序是否开启调试模式,默认为false。开启调试模式后,可以在开发者工具中查看详细的日志信息。

{"pages": ["pages/home/home","pages/usercenter/index","pages/usercenter/person-info/index","pages/usercenter/address/list/index","pages/usercenter/address/edit/index","pages/goods/list/index","pages/goods/details/index","pages/goods/category/index","pages/goods/search/index","pages/goods/result/index","pages/cart/index","pages/order/order-confirm/index","pages/order/receipt/index","pages/order/pay-result/index","pages/order/order-list/index","pages/order/order-detail/index","pages/goods/comments/index","pages/order/apply-service/index","pages/order/after-service-list/index","pages/order/after-service-detail/index","pages/goods/comments/create/index","pages/coupon/coupon-list/index","pages/coupon/coupon-detail/index","pages/coupon/coupon-activity-goods/index","pages/promotion-detail/index","pages/order/fill-tracking-no/index","pages/order/delivery-detail/index","pages/order/invoice/index","pages/usercenter/name-edit/index"],"tabBar": {"custom": true,"color": "#666666","selectedColor": "#FF5F15","backgroundColor": "#ffffff","borderStyle": "black","list": [{"pagePath": "pages/home/home","text": "首页"},{"pagePath": "pages/goods/category/index","text": "分类"},{"pagePath": "pages/cart/index","text": "购物车"},{"pagePath": "pages/usercenter/index","text": "我的"}]},"requiredPrivateInfos": ["chooseAddress"],"lazyCodeLoading": "requiredComponents","usingComponents": {},"window": {"backgroundTextStyle": "light","navigationBarBackgroundColor": "#fff","navigationBarTitleText": "Weixin","navigationBarTextStyle": "black"},"sitemapLocation": "sitemap.json","permission": {"scope.userLocation": {"desc": "你的位置信息将用于小程序位置接口的效果展示"}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一题——LeetCode2129.将标题首字母大写

方法一 个人方法 将字符串转为数组&#xff0c;遍历数组&#xff0c;对数组的每一个元素&#xff0c;先全部转为小写&#xff0c;如果当前元素长度大于2&#xff0c;将第一个字符转为大写形式 var capitalizeTitle function(title) {titletitle.split( )for(let i0;i<tit…

同学,请实现一个扫码登录

大概的流程图如下 主要涉及到的是pc端、手机端和后台服务端。由于听产品同事说手机端由原生端&#xff08;安卓和IOS&#xff09;来实现&#xff0c;因此我这边只需要开发pc端就行&#xff0c;工作量直接减半有没有。做过该功能的小伙伴肯定了解&#xff0c;pc端的实现还是比较…

python淘宝网页爬虫数据保存到 csv和mysql(selenium)

数据库连接设置&#xff08;表和字段要提前在数据库中建好&#xff09; # 数据库中要插入的表 MYSQL_TABLE goods# MySQL 数据库连接配置,根据自己的本地数据库修改 db_config {host: localhost,port: 3306,user: root,password: ma*****6,database: may2024,charset: utf8mb…

一体机电脑辐射超标整改

电脑一体机是目前台式机和笔记本电脑之间的一个新型的市场产物&#xff0c;它将主机部分、显示器部分整合到一起的新形态电脑&#xff0c;该产品的创新在于内部元件的高度集成。随着无线技术的发展&#xff0c;电脑一体机的键盘、鼠标与显示器可实现无线链接&#xff0c;机器只…

云打印下载,云打印怎么使用?

互联网的发展让许多实体业务都受到了强烈的冲击&#xff0c;这其中打印业务也是其中之一。在当前云打印技术的推广下&#xff0c;现在有越来越多有打印需求的用户都开始选择性价比更高、打印更方便的云打印服务了。那么云打印下载&#xff0c;云打印怎么使用&#xff1f;今天小…

AIGC——ComfyUI 安装与基础使用

简介 ComfyUI是一个基于节点流程的稳定扩散操作界面&#xff0c;通过流程实现了更加精准的工作流定制和完善的可复现性。每个模块都有特定的功能&#xff0c;我们可以通过调整模块连接来实现不同的出图效果。然而&#xff0c;节点式的工作流也提高了一定的使用门槛。同时&…

leetcode代码记录(有序数组两数之和

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给定一个已按照 升序排列 的整数数组 numbers &#xff0c;请你从数组中找出两个数满足相加之和等于目标数 target 。 函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numb…

25.5 MySQL 聚合函数

1. 聚合函数 聚合函数(Aggregate Function): 是在数据库中进行数据处理和计算的常用函数. 它们可以对一组数据进行求和, 计数, 平均值, 最大值, 最小值等操作, 从而得到汇总结果.常见的聚合函数有以下几种: SUM: 用于计算某一列的数值总和, 可以用于整数, 小数或者日期类型的列…

SpringBoot(容器功能)

文章目录 1.Configuration 添加/注入bean1.注入bean1.编写一个JavaBean&#xff0c;Monster.java2.创建一个config文件夹&#xff08;名字任意&#xff09;&#xff0c;用于存放配置Bean的类&#xff08;相当于配置文件&#xff09;3.BeanConfig.java4.测试使用 MainApp.java2.…

通过Office Web Viewer站点在线展示Office文档内容

方法&#xff1a; https://view.officeapps.live.com/op/view.aspx?src经Url编码的文档线上Url地址 比如&#xff1a; //以下地址来自一份旧项目代码&#xff0c;可见用的就是该方案function OfficeFileViewOnline(url, file_type, file_name) {url "http://14.23.112.2…

RPC通信原理

RPC通信原理 RPC的概念 如果现在我有一个电商项目&#xff0c;用户要查询订单&#xff0c;自然而然是通过Service接口来调用订单的实现类。 我们把用户模块和订单模块都放在一起&#xff0c;打包成一个war包&#xff0c;然后再tomcat上运行&#xff0c;tomcat占有一个进程&am…

用chatgpt写论文重复率高吗?如何降低重复率?

ChatGPT写的论文重复率很低 ChatGPT写作是基于已有的语料库和文献进行训练的&#xff0c;因此在写作过程中会不可避免地引用或借鉴已有的研究成果和观点。同时&#xff0c;由于ChatGPT的表述方式和写作风格与人类存在一定的差异&#xff0c;也可能会导致论文与其他文章相似度高…

扩展学习|系统理解数字经济

文献来源&#xff1a;[1]肖静华,胡杨颂,吴瑶.成长品&#xff1a;数据驱动的企业与用户互动创新案例研究[J].管理世界,2020,36(03):183-205.DOI:10.19744/j.cnki.11-1235/f.2020.0041. [2]陈晓红,李杨扬,宋丽洁等.数字经济理论体系与研究展望[J].管理世界,2022,38(02):208-22413…

力扣面试经典150 —— 11-15题

力扣面试经典150题在 VScode 中安装 LeetCode 插件即可使用 VScode 刷题&#xff0c;安装 Debug LeetCode 插件可以免费 debug本文使用 python 语言解题&#xff0c;文中 “数组” 通常指 python 列表&#xff1b;文中 “指针” 通常指 python 列表索引 文章目录 11. [中等] H指…

YOLOv9改进 添加三分支注意力机制TripletAttention

一、TripletAttention论文 论文地址: 2010.03045.pdf (arxiv.org) 二、TripletAttention结构 对于输入张量,TripletAttention通过旋转操作和残差变换建立维度间依赖关系,并以可忽略的计算开销对通道间和空间信息进行编码。TripletAttention通过几乎无参数的特点来建模通道…

qt如何配置ros环境

在Qt5.7的版本可以使用bash -i -c来启动qt&#xff0c;让Qt自己识别系统环境&#xff0c;不知道为什么Qt在之后的版本&#xff0c;这样使用都失效了。因为它会默认把CMAKE_PREFIX_PATH修改掉。 网上还有安装ros插件版本的qt creator&#xff0c;感觉失去了一些灵活性。 自己测试…

数据结构 第1章:绪论

文章目录 1. 绪论1.1. 数据结构 1.2. 算法1.2.1. 算法的基本概念1.2.2. 算法的时间复杂度1.2.3. 算法的空间复杂度 1. 绪论 程序 数据结构 算法 1.1. 数据结构 数据&#xff1a;是对客观事物的符号表示&#xff0c;在计算机科学中是指所有能输入到计算机中并被计算机程序处理…

Python: 如何绘制核密度散点图和箱线图?

01 数据样式 这是数据样式&#xff1a; 要求&#xff08;我就懒得再复述一遍了&#xff0c;直接贴图&#xff09;&#xff1a; Note&#xff1a;数据中存在无效值NA&#xff08;包括后续的DEM&#xff09;&#xff0c;需要注意 02 提取DEM 这里我就使用gdal去提取一下DEM列…

深度学习图像算法工程师--面试准备(2)

深度学习面试准备 深度学习图像算法工程师–面试准备&#xff08;1&#xff09; 深度学习图像算法工程师–面试准备&#xff08;2&#xff09; 文章目录 深度学习面试准备前言一、Batch Normalization(批归一化)1.1 具体步骤1.2 BN一般用在网络的哪个部分 二、Layer Normaliza…

CTP-API开发系列之八:报撤单代码实现

CTP-API开发系列之八&#xff1a;报撤单代码实现 CTP-API开发系列之八&#xff1a;报撤单代码实现前情回顾函数实现缓存FrontID 和 SessionID报单函数实现撤单函数实现 调用示例报单&#xff08;形成挂单&#xff09;对挂单进行撤单报单&#xff08;立即成交&#xff09;注意事…