微信小程序上拉、下拉刷新组封装件

news2024/11/14 13:48:09

在开发小程序的时候通常会遇到上拉或者下拉刷新的功能需求,然而这个功能很多页面也都会用到,因此这里,把这个功能封装为组件,方便复用

我很直接,不多说,上代码

首先index.wxml

<scroll-view scroll-y="{{ scrollY }}" style="height:{{ height }}" class="prv-container" enable-flex show-scrollbar="{{ false }}" enhanced scroll-anchoring refresher-enabled="{{ refresherEnable }}" bindrefresherrefresh="_onRefresh" refresher-triggered="{{ refreshing }}" bindscrolltolower="_onLoadmore" bindrefresherpulling="_onPulling" refresher-default-style="none" bindrefresherrestore="_onClose" bindscrolltoupper="_onScrollTop" refresher-threshold="{{ pullDownHeight }}" scroll-into-view="{{ scrollToView }}" scroll-with-animation="{{ scrollWithAnimation }}" scroll-top='{{ topNum }}' bindscroll="onScroll" bindtouchend="handlerTouchend" lower-threshold="70">
  <slot slot="refresher" name="refresher" wx:if="{{ refresherType=='custom' }}"></slot>
  <view slot="refresher" class="prv-pulldown" style="height:{{ pullDownHeight }}px;line-height:{{ pullDownHeight }}px;" wx:else>
    <view wx:if="{{ refresherType=='default' }}">
      <block wx:if="{{ pullState==0||pullState==1 }}">
        <view class="prv-pull-icon" style='transform:rotate({{ pullState==0?0:180 }}deg);'></view>
        <text class="prv_text" wx:if="{{ pullState==0 }}"> {{ pullText }}</text>
        <text class="prv_text" wx:if="{{ pullState==1 }}" space="nbsp"> {{ releaseText }}</text>
      </block>
      <block wx:if="{{ pullState==2 }}">
        <view class="prv-loading"></view><text> {{ refreshText }}</text>
      </block>
    </view>
    <view wx:elif="{{ refresherType=='circle' }}" class="prv-loading prv-dot-loading">
    </view>
  </view>
  <slot></slot>
  <slot name="loader" wx:if="{{ loadType=='custom'&&!isEmpty&&showLoading }}"></slot>
  <view class="prv-loadmore" wx:elif="{{ !isEmpty&&showLoading }}">
    <block wx:if="{{ nomore }}">
      <text class="loadmore_text">{{ nomoreText }}</text>
    </block>
    <block wx:else>
      <view class="prv-loading"></view><text>{{ loadmoreText }}</text>
    </block>
  </view>
</scroll-view>

<!-- 置顶 -->
<view wx:if="{{ showTop }}" class="go-top" bindtap="goTop">置顶</view>

接着index.wxss

:host {
  position: relative;
  overflow: hidden;
  display: block;
}

.prv-container {
  display: flex;
  flex-direction: column;
  position: relative;
  width: 100%;
}

.prv-scroll-view {
  height: 100%;
  flex: 1;
}

.prv-pulldown {
  width: 100%;
  text-align: center;
  display: block;
  font-size: 26rpx;
}

.prv-pulldown .prv_text {
  color: #222;
}

.prv-loadmore {
  height: 120rpx;
  width: 100%;
  line-height: 120rpx;
  text-align: center;
  font-size: 26rpx;
}

.prv-loadmore .loadmore_text {
  color: #444;
}

@keyframes loading {
  0% {
    transform: rotate(0deg)
  }

  50% {
    transform: rotate(180deg)
  }

  100% {
    transform: rotate(360deg)
  }
}

.prv-pull-icon {
  width: 18px;
  height: 18px;
  display: inline-block;
  vertical-align: middle;
  transition: all 0.6s ease;
  background: transparent url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACABAMAAAAxEHz4AAAAJ1BMVEUAAABvb29wcHBzc3NwcHBwcHBwcHBwcHBwcHBwcHBvb29vb29wcHAefdnwAAAADHRSTlMAVdQqRTL07OPbTD3LST/yAAABVElEQVRo3u3OsU0EUQyE4UUnEkiuALITGcHqKiCjBlpAlEFIMbQACUJyUdwfOZiVvXZwkSd4z3Yw+pbJJI9dMgVTMAVTMAVTMAVTMAVTMAVTMAVTcO2CddnK7bq34PC4WfB62ltw/vtaNPefP+u+gsOTfSyaF7PTvoKz2e+zXO/ezSCkBQDM3qTgwQxCWgCAHDcKIIQFDrBvEdzYFoFbAMgJ3AJATuAUAHICpwCQE7gEgJzAJQDkBA4BICdwCAA5gT0A5AT2AJATWANATmBVQIHApoACgU0AFQKLACoEFgFUCMwCqBCYBVAhMAqgQmAUQIXAJIAKgUkAFQKDACoEBgFUCPwCqBD4BVAh8DUATuBzQIPA64AGgdcBDQKPAxoEHgc0CKQHgOAB0CP0ARAE0CYAaBP6AAgOaBMc0CcA6BMc0CcA6BMc0CQ4oEtwQJNwXCaTPP9ccLYeafVjOwAAAABJRU5ErkJggg==) no-repeat;
  background-size: 100%;
}

.prv-loading {
  width: 20px;
  height: 20px;
  display: inline-block;
  vertical-align: middle;
  margin-top: -2rpx;
  animation: weuiLoading 1s steps(12, end) infinite;
  background: transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=) no-repeat;
  background-size: 100%
}


@keyframes weuiLoading {
  0% {
    transform: rotate3d(0, 0, 1, 0deg)
  }

  100% {
    transform: rotate3d(0, 0, 1, 360deg)
  }
}

.prv-dot-loading,
.prv-dot-loading:before,
.prv-dot-loading:after {
  display: inline-block;
  vertical-align: middle;
  width: 6px;
  height: 6px;
  -webkit-border-radius: 50%;
  border-radius: 50%;
  background-color: rgba(0, 0, 0, 0.3);
  font-size: 0;
  animation: dot2 1s step-start infinite
}

.prv-dot-loading {
  position: relative
}

.prv-dot-loading:before {
  content: "";
  position: absolute;
  left: -12px;
  background-color: rgba(0, 0, 0, 0.1);
  animation: dot1 1s step-start infinite
}

.prv-dot-loading:after {
  content: "";
  position: absolute;
  right: -12px;
  background-color: rgba(0, 0, 0, 0.5);
  animation: dot3 1s step-start infinite
}

@keyframes dot1 {
  0%,
  100% {
    background-color: rgba(0, 0, 0, 0.1)
  }

  30% {
    background-color: rgba(0, 0, 0, 0.5)
  }

  60% {
    background-color: rgba(0, 0, 0, 0.3)
  }
}

@keyframes dot2 {
  0%,
  100% {
    background-color: rgba(0, 0, 0, 0.3)
  }

  30% {
    background-color: rgba(0, 0, 0, 0.1)
  }

  60% {
    background-color: rgba(0, 0, 0, 0.5)
  }
}

@keyframes dot3 {
  0%,
  100% {
    background-color: rgba(0, 0, 0, 0.5)
  }

  30% {
    background-color: rgba(0, 0, 0, 0.3)
  }

  60% {
    background-color: rgba(0, 0, 0, 0.1)
  }
}

.go-top{
  position: fixed;
  right: 21rpx;
  bottom: 170rpx;
  border-radius: 50%;
  font-size: 22rpx;
  color: #fff;
  background: rgba(0,0,0,0.5);
  width: 70rpx;
  height: 70rpx;
  text-align: center;
  line-height: 70rpx;
}

然后index.js

// 支持下拉刷新-上拉加载的组件
Component({
  options: {
    // 加入下面一段代码才能正常使用slot的name区分
    multipleSlots: true
  },
  properties: {
    height: {
      type: String,
      value: '84vh'
    },
    refresherEnable: {
      type: Boolean,
      value: true
    },
    refresherType: {
      type: String,
      value: 'default',
    },
    loadType: {
      type: String,
      value: 'default',
    },
    pullText: {
      type: String,
      value: '下拉刷新',
    },
    releaseText: {
      type: String,
      value: '松开立即刷新',
    },
    refreshText: {
      type: String,
      value: '正在刷新',
    },
    loadmoreText: {
      type: String,
      value: '加载中',
    },
    nomoreText: {
      type: String,
      value: '没有更多数据',
    },
    pullDownHeight: {
      type: Number,
      value: 60,
    },
    refreshing: {
      type: Boolean,
      value: false,
      observer: '_onRefreshFinished',
    },
    scrollY: {
      type: Boolean,
      value: true
    },
    nomore: {
      type: Boolean,
      value: false,
    },
    showLoading: {
      type: Boolean,
      value: true,
    },
    scrollToView: {
      type: String,
      value: ''
    },
    scrollWithAnimation: {
      type: Boolean,
      value: false,
    }
  },
  data: {
    showTop: false,
    pullState: 0, // 下拉状态
    lastScrollEnd: 0,
    scrollTop: 0,
    isLoadMore: false,
    moveY: -60,
    topNum: 0,
  },
  attached() {
    this.setData({
      endY: -this.properties.pullDownHeight
    })
  },
  methods: {
    // 被下拉
    _onPulling: function (e) {
      console.log('被下拉', e)
      let y = e.detail.dy
      if (y < this.properties.pullDownHeight) {
        if(this.data.pullState == 0) return
        this.setData({
          pullState: 0
        })
      } else {
        if(this.data.pullState == 1) return
        this.setData({
          pullState: 1
        })
      }
      // this.triggerEvent('onpulling', this.data.pullState)
    },
    // 滚动到顶部
    _onScrollTop: function (e) {
      console.log('滚动到顶部', e)
      this.triggerEvent('scrolltoupper', e)
    },
    // 下拉刷新执行
    _onRefresh: function (e) {
      console.log('下拉刷新执行', e)
      this.setData({
        pullState: 2
      })
      this.triggerEvent('onrefresh', e)
    },
    // 下拉刷新关闭
    _onClose: function (e) {
      console.log('下拉刷新关闭', e)
      this.triggerEvent('onrefreshclose', e);
    },
    // 滚动到底部
    _onLoadmore: function (e) {
      console.log('滚动到底部', e)
      this.triggerEvent('scrolltolower', e)
      if (!this.properties.refreshing) {
        this.triggerEvent('loadmore', e);
      }
    },
    // 回到顶部
    goTop() {
      console.log('到顶部')
      this.setData({
        topNum: 0
      })
    },
    // 滚动事件
    onScroll(e) {
      if (e.detail.scrollTop > 800) {
        if (this.data.showTop) return
        console.log('置顶按钮显示')
        this.setData({
          showTop: true
        })
      } else {
        if (!this.data.showTop) return
        console.log('置顶按钮隐藏')
        this.setData({
          showTop: false
        })
      }
      // 触发一个重绘的动作 否则经常不能横向切换
      this.triggerEvent('resizeactioin')
    },
    // 触摸结束事件
    handlerTouchend() {
      console.log('触摸结束')
      this.triggerEvent('resizeactioin')
    },
    // 隐藏置顶按钮
    hideGoTop() {
      console.log('隐藏 go top')
      this.setData({
        showTop: false
      })
    }
  },
})

然后index.json,无改动

{
  "usingComponents": {}
}

最后使用方法
在要用到此组件的页面里面引入,首先index.json文件里面如下:

{
  "usingComponents": {
    "pull-refresh": "这里是组件文件所在路径"
  }
}

然后在index.wxml文件中引入index.json中命名的组件

<pull-refresh height="100vh" bindonrefresh="onRefresh" refreshing="{{ isRefreshing }}" bindloadmore="onLoadMore" nomore="{{ isFinish }}" pullText="下拉可以刷新" loadmoreText="加载中...">
  <view class="item" wx:for="{{ list }}" wx:key="index">{{ index+1 }}</view>
</pull-refresh>

最后在index.js文件中写你需要的逻辑,下面是我写的栗子代码



Page({
  data: {
    list: 0,
    pageInfo: {
      pageSize: 10,
      pageNum: 1
    },
    isRefreshing: false, // 下拉刷新
    isFinish: false // 上拉加载
  },
  onLoad() {
    this.getlist()
  },
  getlist() {
    const that = this
    setTimeout(() => {
      this.setData({
        list: that.data.list + that.data.pageInfo.pageSize,
        isFinish: that.data.list + that.data.pageInfo.pageSize >= 20,
        isRefreshing: false
      })
    }, 700)
    console.log('66666666', this.data.list)
  },
  // 上拉加载
  onLoadMore() {
    console.log("上拉加载", this.data.nomore)
    if (this.data.isFinish) return
    this.setData({
      isRefreshing: true
    })
    this.data.pageInfo.pageNum++
    this.getlist()
  },

  // 下拉刷新
  onRefresh() {
    console.log("下拉刷新")
    this.data.list = 0
    this.data.pageInfo = {
      pageSize: 10,
      pageNum: 1
    }
    this.getlist()
  }
})

样式文件index.wxss

.item{
  height: 160rpx;
  line-height: 160rpx;
  padding: 10px;
  text-align: center;
  background: linear-gradient(to bottom right, rgba(23, 184, 196, 0.295) ,rgba(0, 0, 255, 0.308));
}

到这里就宣布结束
人无完人,码无完码,有缺陷之处希望各位不吝指出
加个关注,不定时更新~

有玩王者的小伙伴也可以加我一起开黑哈

又菜又爱玩,我在安卓微区

在这里插入图片描述
有兴趣的小伙伴可加我微
在这里插入图片描述

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

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

相关文章

LNMP架构的源码编译环境下部署 Discuz!社区论坛与Wordpress博客

目录 一.编译安装Nginx 1.关闭防火墙 2.安装依赖包 3.创建运行用户 4.解压软件包并编译安装 5.软链接路径优化 6.添加Nginx系统服务 二.编译安装MySQL服务 1.安装依赖环境 2.创建运行用户 3.解压软件包并编译安装 4.数据库目录进行权限调整 5.修改配置文件 6.设…

linux面试基础篇

题目目录1.简述DNS分离解析的工作原理&#xff0c;关键配置2.apache有几种工作模式&#xff0c;分别简述两种工作模式及其优缺点&#xff1f;3.写出172.0.0.38/27 的网络id与广播地址4.写出下列服务使用的传输层协议&#xff08;TCP/UDP&#xff09;及默认端口5.在局域网想获得…

Uni-app页面路由的几种写法

uni.navigateTo( OBJECT) 保留当前页面&#xff0c;跳转到应用内的某个页面&#xff0c;使用 uni.navigateBack 可以返回到原来页面 ONJECT参数说明&#xff1a; 注意&#xff1a; 页面跳转路径有层级限制&#xff0c;不能无限跳转新页面跳转到 tabBar 页面只能使用 switchT…

NCRE计算机等级考试Python真题(十二)

第十二套试题1、以下关于程序设计语言的描述&#xff0c;错误的选项是&#xff1a;A.Python语言是一种脚本编程语言B.汇编语言是直接操作计算机硬件的编程语言C.程序设计语言经历了机器语言、汇编语言、脚本语言三个阶段D.编译和解释的区别是一次性翻译程序还是每次执行时都要翻…

LCD液晶段码屏显示驱动IC -VK2C23高抗干扰/抗噪,适用于瓦斯表/燃气表/煤气表

产品型号&#xff1a;VK2C23A/B产品品牌&#xff1a;永嘉微电/VINKA封装形式&#xff1a;LQFP64/48可定制&#xff1a;DICE(COB邦定片)&#xff1b;COG(邦定玻璃用)产品年份&#xff1a;新年份原厂 工程服务&#xff0c;技术支持&#xff01;VK2C23A/B概述&#xff1a;VK2C23A/…

微信小程序this指向问题

前言 最近在开发微信小程序时不时会遇到一个很奇怪的问题&#xff0c;有些情况下用 this.setData 可以改变视图显示&#xff0c;有些情况下使用 this.setData 无效&#xff0c;这又是为什么呢&#xff1f; 问题描述 在解释这个问题前&#xff0c;我们先来看两段代码&#xff1…

强烈推荐YouTube精选wxWidgets视频教程汇总

wxWidgets介绍 wxWidgets介绍 —— 一文全面了解wxWidgets_boomworks的博客-CSDN博客wxWidgets由爱丁堡大学的Julian Smart于1992年创立。最初是一个用于创建在Unix和Windows上可移植的应用程序的项目&#xff0c;后来它已成长为支持MacOS&#xff0c;GTK以及许多其他工具包和…

【Linux】-- 权限和Shell运行原理

目录 Shell的运行原理 用户切换 su - / su sudo 权限 chmod chown chgrp 八进制方法修改文件属性 目录权限 粘滞位 umask 自定义默认权限 Shell的运行原理 广义上&#xff0c;Linux发行版 Linux内核 外壳程序 Linux 从广义上来理解它是一个操作系统 而从狭义上…

NTLM Relay利用

简介 NTLM Relay也被就是Net-NTLM Relay攻击&#xff0c;当获得Net-NLTM Hash之后可以进行攻击重放, 进行中间人攻击,攻击者作为中间人在客户端与服务端之间转发NTLM认证数据包,从而模拟客户端 身份访问服务端的资源,本篇文章主要是介绍NTLM Relay常见的利用手法以及漏洞,Rela…

蓝桥杯真题31日冲刺 |第一天

蓝桥杯真题31日冲刺 |第一天 一&#xff1a;完全平方数 题目&#xff1a;[链接](完全平方数 - 蓝桥云课 (lanqiao.cn)) 思路&#xff1a; 将 每个 完全平方数都 消掉&#xff0c;剩下的就是 不能构成平方的数 以12 为例&#xff1a; 所以 12 只要再 乘个三 即可满足 代…

leetcode-每日一题-1653(中等,字符串判断)

这道题想清楚原理的话解决起来还是比较简单的&#xff0c;就是从第一个字母开始向两边排除字母给你一个字符串 s &#xff0c;它仅包含字符 a 和 b​​​​ 。你可以删除 s 中任意数目的字符&#xff0c;使得 s 平衡 。当不存在下标对 (i,j) 满足 i < j &#xff0c;且 s[i]…

当ChatGPT遇见stable-diffusion,你不敢相信的创意艺术之旅!

前言 欢迎来到一场创意的旅程&#xff0c;这里将聚焦于 ChatGPT 和 stable-diffusion 这两个令人激动的技术。在这篇文章中&#xff0c;我们将会探索这两种技术如何结合使用&#xff0c;为艺术创作带来全新的可能性。我们将探讨如何利用 ChatGPT 生成富有想象力的创意&#xf…

Java异常详解

文章目录1. 异常1.1 异常概述1.2 异常机制概述1.3 程序错误一般分为三种1.4 异常继承结构1.5 编译时异常和运行时异常别称1.6 编译时异常和运行时异常的区别1.7 Throwable中java的异常一般分为受查异常和非受查异常1.8 异常处理方式1.9 Java常见异常1.10 throw和throws的区别1.…

Mac安装chromedriver

1、查看当前Google浏览器版本 打开Google浏览器&#xff0c;网址栏输入&#xff1a;chrome://settings/help 2、下载对应版本的chromedriver &#xff08;1&#xff09;下载地址&#xff1a;http://chromedriver.storage.googleapis.com/index.html &#xff08;2&#xff09…

17万字 JUC 看这一篇就够了(一) (精华)

JUC 今天我们来进入到 Java并发编程 JUC 框架的学习 &#xff0c;内容比较多&#xff0c;但希望我们都能静下心来&#xff0c;耐心的看完这篇文章 文章目录JUC进程概述对比线程创建线程ThreadRunnableCallable线程方法APIrun startsleep yieldjoininterrupt打断线程打断 park终…

运算符——“Python”

各位CSDN的uu们你们好呀&#xff0c;好久没有更新Python文章了&#xff0c;今天&#xff0c;小雅兰的内容就是Python中的操作符啦&#xff0c;那么现在&#xff0c;就让我们进入Python的世界吧 注释 注释是什么 注释的语法 注释的规范 输入输出 和用户交互 通过控制台输出 通…

OpenAI CTO、吴恩达夫人……AI 领域值得关注的「她」力量,个个都是女强人

内容一览&#xff1a; 「她时代」来临&#xff0c;一些有着强大信念与热情的女性&#xff0c;纷纷投身至 AI 领域&#xff0c;成为不可或缺的存在与力量。值此国际妇女节到来之际&#xff0c;HyperAI超神经盘点了领域内令人印象深刻的杰出的女性代表。 关键词&#xff1a;国际妇…

三八妇女节送什么礼物?实用的三八妇女节礼物清单

三八妇女节送什么礼物好呢&#xff01;随着中国人民的生活越来越好&#xff0c;想法也越来越多&#xff0c;&#xff0c;一般三八妇女节送礼物的&#xff0c;基本上都是给老师送礼物&#xff0c;或者给妈妈送礼物&#xff0c;我就给大家分享下&#xff0c;我今天下午送的什么吧…

超500万人次关注的千人大会!2023实在智能【未来电商高峰论坛】,圆满收官!

数字经济时代&#xff0c;电商产业乘风而起。3月4日-5日&#xff0c;一场电商行业盛会——由实在智能参与主办的未来电商高峰论坛暨2023第一届电商生态赋能大会在杭州未来科技城圆满举办。本次大会是在经济复苏背景下&#xff0c;紧紧抓住消费回暖机遇&#xff0c;进一步创新融…

scratch老鹰捉小鸡 电子学会图形化编程scratch等级考试二级真题和答案解析2022年12月

目录 scratch老鹰捉小鸡 一、题目要求 1、准备工作 2、功能实现 二、案例分析 <