# UniElement

UVUE DOM 元素对象,描述了 UVUE DOM 元素所普通具有的属性和方法。

# UniElement 的属性值

名称 类型 必备 默认值 兼容性 描述
classList Array<string> -
只读属性 获取当前元素的的 class 属性的动态集合。
firstChild UniElement -
只读属性 获取当前元素的的第一个子元素,如果元素是无子元素,则返回 null。
lastChild UniElement -
只读属性 获取当前元素的最后一个子元素,如果没有子元素,则返回 null。
parentElement UniElement -
只读属性 获取当前元素在 DOM 树中的父元素,如果没有父元素(如未添加到DOM树中),则返回null。
previousSibling UniElement -
只读属性 获取当前元素的前一个同级元素,没有则返回null。
nextElementSibling UniElement -
只读属性 获取在 DOM 树中紧跟在其后面的同级元素,如果指定的元素为最后一个元素,则返回 null。
children Array<UniElement> -
只读属性 获取当前元素包含的子元素的集合
tagName string -
只读属性 获取当前元素的标签名
nodeName string -
只读属性 获取当前元素的元素名称
dataset Map<string, any> -
只读属性 获取元素上自定义数据属性(data-*)的集合
attributes Map<string, any> -
只读属性 获取元素上所有属性元素的集合
style CSSStyleDeclaration -
只读属性 获取元素的CSS样式对象
scrollWidth number -
只读属性 获取可滚动元素内容的总宽度,仅scroll-view、list-view组件支持,其他组件返回视图宽度
scrollHeight number -
只读属性 获取可滚动元素内容的总高度,仅scroll-view、list-view组件支持,其他组件返回视图高度
scrollLeft number -
获取或修改元素滚动条到元素左边的距离像素数,仅scroll-view、list-view组件支持。其他组件返回0
scrollTop number -
获取或修改元素滚动条到元素顶部的距离像素数,仅scroll-view、list-view组件支持。其他组件返回0
offsetLeft number -
只读属性 元素的左边界偏移值 单位px
offsetTop number -
只读属性 元素的顶部边界偏移值 单位px
offsetWidth number -
只读属性 元素的布局宽度,宽度包含border、padding的数据值 单位px
offsetHeight number -
只读属性 元素的布局高度,高度包含border、padding的数据值 单位px
ext Map<string, any> -
只读属性 扩展属性

# style

  • App端 获取的是元素对象计算后的CSS样式集合对象,包括通过样式选择器设置的CSS样式。

  • Web端 获取的是元素对象style属性设置的CSS样式集合对象,不包括通过样式选择器设置的CSS样式。

  • 小程序端 获取的是元素对象style属性设置的CSS样式集合对象(仅限通过 UniElement.style 的API设置的),不包括通过样式选择器设置的CSS样式,也不包含在模板上绑定的style属性。

# 方法

# appendChild(aChild: UniElement): void

将一个元素添加到指定父元素的子元素列表的末尾处。如果将被插入的元素已经存在于当前文档的文档树中,那么将会它从原先的位置移动到新的位置。

# 参数
名称 类型 必填 默认值 兼容性 描述
aChild UniElement -
插入子元素对象
# appendChild 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

# insertBefore(newChild: UniElement, refChild?: UniElement | null): UniElement | null

在参考元素之前插入一个拥有指定父元素的子元素。如果给定的子元素是对文档中现有元素的引用,insertBefore() 会将其从当前位置移动到新位置。

# 参数
名称 类型 必填 默认值 兼容性 描述
newChild UniElement -
插入子元素对象
refChild UniElement -
已存在父元素的子元素对象
# 返回值
类型 必备
UniElement
# insertBefore 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

# insertBefore(newChild: UniElement): UniElement | null

将一个元素添加到指定父元素的子元素列表的末尾处 功能等同于appendChild

# insertBefore 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25
# 参数
名称 类型 必填 默认值 兼容性 描述
newChild UniElement -
插入子元素对象
# 返回值
类型 必备
UniElement

# setAttribute(key: string, value: string): void

设置指定元素上的某个属性值。如果设置的属性已经存在,则更新该属性值;否则使用指定的名称和值添加一个新的属性。

注意

  • setAttribute从HBuilderX 3.93起,调整为只能保存string类型属性值,需要保存其它类型数据请使用dataset属性。
  • 为保证多端一致setAttribute不应用于修改本文档中的UniElement属性,如有此类需求应使用element.xxx设置,如element.scrollTop。其余绑定到内置组件的属性也尽量使用数据驱动而不是绕过vue去设置。
# 参数
名称 类型 必填 默认值 兼容性 描述
key string - - 属性名称
value string - - 属性值域
# setAttribute 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

App平台 app平台 setAttribute 不支持设置 class、style 属性,设置了也不会生效,class 属性需在 uvue/vue 页面中设置,style 信息可以通过 style 属性设置。

# getAttribute(key: string): string | null

获取元素指定的属性值,如果指定的属性不存在则返回null。

注意

  • getAttribute返回值从HBuilderX 3.93起,调整为string类型,不要使用此方法获取非string类型的属性值。如有非string需求,请使用对象的点操作符直接访问dateset属性,不通过getAttribute方法。
  • 为保证多端一致getAttribute不应用于获取本文档中的UniElement属性,如有此类需求应使用element.xxx获取,如element.scrollTop。
# 参数
名称 类型 必填 默认值 兼容性 描述
key string - - 属性名称
# 返回值
类型 必备
string
# getAttribute 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 4.41 4.0 4.11 4.25

App平台 app平台 getAttribute 不支持获取 class、style 属性, uvue/vue 页面中设置的 class 属性暂不支持通过 UniElement 对象获取,style 信息可以通过 style 属性获取。

# hasAttribute(key: string): boolean

返回改元素是否包含有指定的属性,属性存在则返回true,否则返回false。

# 参数
名称 类型 必填 默认值 兼容性 描述
key string - - 属性名称
# 返回值
类型
boolean
# hasAttribute 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

# removeAttribute(key: string): void

从元素中删除一个属性,如果指定的属性不存在,则不做任何操作,也不会产生错误。

# 参数
名称 类型 必填 默认值 兼容性 描述
key string - - 属性名称
# removeAttribute 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

# getAndroidView(): View | null

获取元素android原生view 可能返回null

# 返回值
类型 必备
View
# getAndroidView 兼容性
Web 微信小程序 Android iOS
x x 4.25 x

getAndroidView获取原生View:

//通过组件定义的id属性值,获取到UniElement对象
const element = uni.getElementById(id)
//getAndroidView不设置泛型,获取到安卓View
if(element != null) {
	const view = element.getAndroidView()
}

更多示例请参考 uts 插件 uts-get-native-view

注意事项:

  • 安卓平台页面渲染时元素才会构建View,所以元素刚创建就获取View大概率是null,推荐页面onReady时获取。
  • 安卓平台获取的原生View尽可能的避免设置View的background属性,会导致元素background、border、boxshadow css效果失效或设置的background不生效,与设置background时机有关。

# getAndroidView<T>(): T | null

获取元素android原生view 通过泛型定义view类型 可能返回null

# 返回值
类型 必备
T
# getAndroidView 兼容性
Web 微信小程序 Android iOS
x x 4.25 x

getAndroidView通过泛型定义获取原生View:

//导入安卓原生WebView对象
import WebView from "android.webkit.WebView"

//通过web-view组件定义的id属性值,获取web-view标签的UniElement对象
const webViewElement = uni.getElementById(id)
//getAndroidView设置泛型为安卓底层WebView对象, 直接获取WebView 如果泛型不匹配会返回null
if(webViewElement != null) {
	const webview = webViewElement.getAndroidView<WebView>()
}

获取到原生的WebView对象后,可以直接使用其所有属性和方法。原生对象的方法非常多,远多于 uni-app x 封装的API。这些方法都可以直接调用了。

在 hello uni-app x 的 组件 -> web-view 示例中,获取原生WebView对象,然后进一步使用了可否前进后退的方法。

可通过getAndroidView泛型明确定义View类型的组件:

组件 对应 android 平台原生View
view ViewGroup
input AppCompatEditText
textarea AppCompatEditText
web-view WebView

注意事项:

  • 安卓平台页面渲染时元素才会构建View,所以元素刚创建就获取View大概率是null,推荐页面onReady时获取。
  • 安卓平台获取的原生View尽可能的避免设置View的background属性,会导致元素background、border、boxshadow 失效或设置的background不生效,与设置background时机有关。

# getAndroidActivity(): Activity | null

获取元素android原生activity 可能返回null

# 返回值
类型 必备
Activity
# getAndroidActivity 兼容性
Web 微信小程序 Android iOS
x x 4.25 x

# getBoundingClientRect(): DOMRect

获取元素的大小及其相对于窗口的位置信息。

# 返回值
类型 描述
DOMRect 一个 DOMRect 代表一个矩形。
# getBoundingClientRect 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

# getBoundingClientRectAsync(options?: GetBoundingClientRectAsyncOptions | null): Promise<DOMRect> | null

获取元素的大小及其相对于窗口的位置信息 异步。

# 参数
名称 类型 必填 默认值 兼容性 描述
options GetBoundingClientRectAsyncOptions - -
名称 类型 必备 默认值 兼容性 描述
success (rect: DOMRect) => void - -
fail () => void - -
complete (rect?: any) => void - -
# 返回值
类型 必备
Promise<DOMRect>
# getBoundingClientRectAsync 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.41 4.41 4.41 4.41 x
# 示例

hello uni-app x

扫码体验(手机浏览器跳转到App直达页)

Template

Script

<template>
  <!-- #ifdef APP -->
  <scroll-view class="page-scroll-view">
  <!-- #endif -->
    <view class="page" id="page">
      <page-head :title="title"></page-head>
      <button class="btn btn-get-all-node-info" @click="getBoundingClientRectAsync">getBoundingClientRectAsync</button>
      <view id="rect-test" ref="rect-test" class="rect-test"></view>
      <view class="rect-info" v-if="rectInfo">
        <view class="node-info-item">
          <text class="node-info-item-k">x: </text>
          <text class="node-info-item-v">{{rectInfo.x}}</text>
        </view>
        <view class="node-info-item">
          <text class="node-info-item-k">y: </text>
          <text class="node-info-item-v">{{rectInfo.y}}</text>
        </view>
        <view class="node-info-item">
          <text class="node-info-item-k">width: </text>
          <text class="node-info-item-v">{{rectInfo.width}}</text>
        </view>
        <view class="node-info-item">
          <text class="node-info-item-k">height: </text>
          <text class="node-info-item-v">{{rectInfo.height}}</text>
        </view>
        <view class="node-info-item">
          <text class="node-info-item-k">left: </text>
          <text class="node-info-item-v">{{rectInfo.left}}</text>
        </view>
        <view class="node-info-item">
          <text class="node-info-item-k">top: </text>
          <text class="node-info-item-v">{{rectInfo.top}}</text>
        </view>
        <view class="node-info-item">
          <text class="node-info-item-k">right: </text>
          <text class="node-info-item-v">{{rectInfo.right}}</text>
        </view>
        <view class="node-info-item">
          <text class="node-info-item-k">bottom: </text>
          <text class="node-info-item-v">{{rectInfo.bottom}}</text>
        </view>
      </view>
    </view>
  <!-- #ifdef APP -->
  </scroll-view>
  <!-- #endif -->
</template>



<style>
  .page {
    padding: 15px;
  }

  .btn {
    margin-top: 15px;
  }

  .rect-test {
    margin-top: 15px;
    height: 100px;
    background-color: dodgerblue;
  }

  .rect-info {
    margin-top: 15px;
    flex-direction: column;
  }

  .node-info-item {
    flex-direction: row;
  }

  .node-info-item-k {
    width: 72px;
    line-height: 2;
  }

  .node-info-item-v {
    font-weight: bold;
    line-height: 2;
  }
</style>

# getDrawableContext(): DrawableContext | null

获取组件的绘制对象,仅uvue页面中的 view 组件支持,其它组件不支持则返回null。

# 返回值
类型 必备
DrawableContext
# getDrawableContext 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
x x 3.9 4.11 4.25

# getIOSView(): UIView | null

获取元素ios原生view

# 返回值
类型 必备
UIView
# getIOSView 兼容性
Web 微信小程序 Android Android uni-app x UTS 插件 iOS iOS uni-app x UTS 插件
x x x x x 4.25

getIOSView 获取原生 View:

//通过 webViewElementId 获取 web-view 标签的 UniElement 对象
const webViewElement = uni.getElementById(webViewElementId)
//获取原生 view
const view = webViewElement?.getIOSView();
//判断 view 是否存在,类型是否为 WKWebView
if (view != null && view instanceof WKWebView) {
    //将 view 转换为 WKWebView 类型
    const webView = view! as WKWebView;
}

获取到原生的WebView对象后,可以直接使用其所有属性和方法。原生对象的方法非常多,远多于 uni-app x 封装的API。这些方法都可以直接调用了。

在 hello uni-app x 的 组件 -> web-view 示例中,获取原生WebView对象,然后进一步使用了可否前进后退的方法。

组件对应原生 View 类型:

组件 对应 iOS 平台原生 View
view UIView
input UITextField
textarea UITextView
web-view WKWebView

注意事项:

  • iOS平台 uvue 环境使用 js 驱动无法处理原生类型,getIOSView 方法需要在 uts 插件中使用。
  • iOS平台页面渲染时元素才会构建View,所以元素刚创建就获取 View 大概率是 null,推荐页面 onReady 时获取。

# addEventListener<T extends UniEvent, R>(type: string, callback: (event: T) => R): UniCallbackWrapper

将指定的监听器注册到元素对象上,当该对象触发指定的事件时,指定的回调函数就会被执行。

# 参数
名称 类型 必填 默认值 兼容性 描述
type string - - 事件类型
callback (event: T) => R - - 事件监听器 T表示event类型,R表示返回值类型
# 返回值
类型 描述
UniCallbackWrapper 事件回调封装类,用于注销监听函数的形参
# addEventListener 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
x x 4.0 4.11 x

# removeEventListener(type: string, callbackWrapper: UniCallbackWrapper): void

删除使用 addEventListener 方法添加的事件监听器。

# 参数
名称 类型 必填 默认值 兼容性 描述
type string - - 事件类型
callbackWrapper UniCallbackWrapper - - 事件监听回调封装类
# removeEventListener 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
x x 4.0 4.11 4.25

# removeChild(aChild: UniElement): UniElement | null

从元素中删除一个子元素,返回删除的元素。

# 参数
名称 类型 必填 默认值 兼容性 描述
aChild UniElement -
被删除子元素对象
# 返回值
类型 必备
UniElement
# removeChild 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

# remove(): void

把元素对象从它所属的 DOM 树中删除。

# remove 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

# scrollTo(x: number, y: number): void

使界面滚动到给定元素的指定坐标位置 仅scroll-view、list-view组件支持

# 参数
名称 类型 必填 默认值 兼容性 描述
x number - - x轴要滚动到坐标位置(单位px)
y number - - y轴要滚动到坐标位置(单位px)
# scrollTo 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

# scrollBy(x: number, y: number): void

使得元素滚动一段特定距离 仅scroll-view、list-view组件支持

# 参数
名称 类型 必填 默认值 兼容性 描述
x number - - x轴要滚动的距离(单位px)
y number - - y轴要滚动的距离(单位px)
# scrollBy 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

# querySelector(selector: string.cssSelectorString): UniElement | null

返回文档中与指定选择器或选择器组匹配的第一个 Element对象。如果找不到匹配项,则返回null

# 参数
名称 类型 必填 默认值 兼容性 描述
selector string.cssSelectorString - - CSS 选择器字符串
# 返回值
类型 必备
UniElement
# querySelector 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

# querySelectorAll(selector: string.cssSelectorString): UniElement[] | null

返回与指定的选择器组匹配的文档中的元素列表

# 参数
名称 类型 必填 默认值 兼容性 描述
selector string.cssSelectorString - - CSS 选择器字符串
# 返回值
类型 必备
Array<UniElement>
# querySelectorAll 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

# focus(): void

使元素获取焦点 仅input、Textarea组件支持

# focus 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

# blur(): void

使元素丢失焦点 仅input、Textarea组件支持

# blur 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
4.0 x 4.0 4.11 4.25

# takeSnapshot(options: TakeSnapshotOptions): void

对当前组件进行截图,调用此方法会将当前组件(包含子节点)渲染结果导出成图片。 成功会返回图片对应的临时文件路径,目前默认png格式

# 参数
名称 类型 必填 默认值 兼容性 描述
options TakeSnapshotOptions - - 组件截图的参数对象
名称 类型 必备 默认值 兼容性 描述
type string "file" - 截图导出类型,目前仅支持 'file' 保存到临时文件目录
format string "png" - 截图文件格式,目前仅支持 'png'
success (res: TakeSnapshotSuccess) => void - - 接口调用成功的回调函数
fail (res: TakeSnapshotFail) => void - - 接口调用失败的回调函数
complete (res: any) => void - - 接口调用结束的回调函数(调用成功、失败都会执行)
# TakeSnapshotSuccess 的属性值
名称 类型 必备 默认值 兼容性 描述
tempFilePath string - - 截图保存的临时文件路径
# TakeSnapshotFail 的属性值
名称 类型 必备 默认值 兼容性 描述
errMsg string - - -
# takeSnapshot 兼容性
Web 微信小程序 Android iOS iOS uni-app x UTS 插件
x x 3.93 4.11 4.25
# 示例

hello uni-app x

该 API 不支持 Web,请运行 hello uni-app x 到 App 平台体验

扫码体验(手机浏览器跳转到App直达页)
<template>
  <view id="snapshot-content">
    <page-head title="对本页面根view截图"></page-head>
    <view class="uni-padding-wrap">
      <text>this is text</text>
    </view>
    <button class="uni-btn btn-TakeSnapshot" type="primary" @tap="takeSnapshotClick">
      点击截图并替换显示下方图片
    </button>
    <image style="margin-left:auto;margin-right:auto;margin-top:20px;width:90%;" :src="snapImage" :mode="mode"
      @longpress="saveToAlbum"></image>
  </view>
</template>

<script lang="uts">
  export default {
    data() {
      return {
        mode: "center",//aspectFit
        snapImage: "/static/uni.png"
      }
    },
    methods: {
      takeSnapshotClick() {
        const view = uni.getElementById('snapshot-content')!
        view.takeSnapshot({
          success: (res) => {
            console.log(res.tempFilePath)
            this.snapImage = res.tempFilePath
            this.mode = 'widthFix'
            uni.showToast({
              title: '截图成功,路径:' + res.tempFilePath,
              icon: "none"
            })
          },
          fail: (res) => {
            console.log(res)
            uni.showToast({
              icon: 'error',
              title: '截图失败'
            })
          }
        })
      },
      saveToAlbum(e : TouchEvent) {
        // console.log(e.currentTarget!.getAttribute("src"));
        let filePath : string = e.currentTarget!.getAttribute("src") as string
        uni.showActionSheet({
          itemList: ["保存"],
          success: res => {
            // console.log(res.tapIndex);
            if (res.tapIndex == 0) {
              uni.saveImageToPhotosAlbum({
                filePath: filePath,
                success() {
                  uni.showToast({
                    position: "center",
                    icon: "none",
                    title: "图片保存成功,请到手机相册查看"
                  })
                },
                fail(e) {
                  uni.showModal({
                    content: "保存相册失败,errCode:" + e.errCode + ",errMsg:" + e.errMsg + ",errSubject:" + e.errSubject,
                    showCancel: false
                  });
                }
              })
            }
          },
          fail: () => { },
          complete: () => { }
        });
      }
    }
  }
</script>

完整示例代码参考hello uni-app x

  • 截图会在应用沙盒目录的cache目录产生临时文件,位置详见
  • app端如需主动删除临时文件,使用uni.getFileSystemManager
  • app端list-view、web-view组件性能优化仅渲染屏幕显示的内容,所以截图仅能截取到当前屏幕展示的内容。
  • app端scroll-view组件设置padding后,截图内容不会包含padding区域。
  • app端由于组件背景默认透明,所以截图图片默认底色为白色。

# getPage(): UniPage | null

获取元素所属的页面对象

# 返回值
类型 必备
UniPage
# getPage 兼容性
Web 微信小程序 Android iOS
4.31 x 4.31 4.31

# animate(keyframes : any, options : any) : UniAnimation | null

创建一个新的动画并应用于元素,然后立即执行动画。

# 参数
名称 类型 必填 默认值 兼容性 描述
keyframes any - - 关键帧对象数组或一个关键帧对象。
options any - - 动画属性配置。
# 返回值
类型 必备
UniAnimation
名称 类型 必备 默认值 兼容性 描述
id string -
获取或设置用于标识动画的字符串
playState string -
返回动画播放状态。可选值:running动画正在运行;paused动画暂停;finished动画播放完成;idle动画取消或者失败
oncancel (event: UniAnimationPlaybackEvent) => void -
监听动画取消事件
onfinish (event: UniAnimationPlaybackEvent) => void -
监听动画完成事件
# UniAnimation 的方法
# cancel() : void

终止并取消所有动画

# cancel 兼容性
Web 微信小程序 Android iOS
x x 4.51 x
# finish() : void

动画跳转到最后一毫秒并立即播放完成

# finish 兼容性
Web 微信小程序 Android iOS
x x 4.51 x
# pause() : void

暂停动画播放

# pause 兼容性
Web 微信小程序 Android iOS
x x 4.51 x
# play() : void

开始或恢复动画播放

# play 兼容性
Web 微信小程序 Android iOS
x x 4.51 x
# animate 兼容性
Web 微信小程序 Android iOS
x x 4.51 x