## UniElement #### style@style - App端 获取的是元素对象计算后的CSS样式集合对象,包括通过样式选择器设置的CSS样式。 - Web端 获取的是元素对象style属性设置的CSS样式集合对象,不包括通过样式选择器设置的CSS样式。 ### 方法 **注意** - setAttribute从HBuilderX 3.93起,调整为只能保存string类型属性值,需要保存其它类型数据请使用dataset属性。 - 为保证多端一致setAttribute不应用于修改本文档中的UniElement属性,如有此类需求应使用element.xxx设置,如element.scrollTop。其余绑定到内置组件的属性也尽量使用数据驱动而不是绕过vue去设置。 **App平台** app平台 setAttribute 不支持设置 class、style 属性,设置了也不会生效,class 属性需在 uvue/vue 页面中设置,style 信息可以通过 [style](#style) 属性设置。 **注意** - getAttribute返回值从HBuilderX 3.93起,调整为string类型,不要使用此方法获取非string类型的属性值。如有非string需求,请使用对象的点操作符直接访问dateset属性,不通过getAttribute方法。 - 为保证多端一致getAttribute不应用于获取本文档中的UniElement属性,如有此类需求应使用element.xxx获取,如element.scrollTop。 **App平台** app平台 getAttribute 不支持获取 class、style 属性, uvue/vue 页面中设置的 class 属性暂不支持通过 UniElement 对象获取,style 信息可以通过 [style](#style) 属性获取。 **getAndroidView获取原生View:** ```uts //通过elementId 获取到UniElement对象 const element = uni.getElementById(elementId) //getElementById不设置泛型,获取到安卓View if(element != null) { const view = element.getAndroidView() } ``` **注意事项:** + 安卓平台页面渲染时元素才会构建View,所以元素刚创建就获取View大概率是null,推荐页面onReady时获取。 + 安卓平台获取的原生View尽可能的避免设置View的background属性,会导致元素background、border、boxshadow css效果失效或设置的background不生效,与设置background时机有关。 **getAndroidView通过泛型定义获取原生View:** ```uts //通过webViewElementId 获取web-view标签的UniElement对象 const webViewElement = uni.getElementById(webViewElementId) //getElementById设置泛型为安卓底层WebView对象, 直接获取WebView 如果泛型不匹配会返回null if(webViewElement != null) { const webview = webViewElement.getAndroidView() } ``` **可通过getAndroidView泛型明确定义View类型的组件:** | 组件 | 对应 android 平台原生View | | --------- | -------------------------------- | | [view](https://doc.dcloud.net.cn/uni-app-x/component/view.html) | [ViewGroup](https://developer.android.google.cn/reference/android/view/ViewGroup) | | [input](https://doc.dcloud.net.cn/uni-app-x/component/input.html) | [AppCompatEditText](https://developer.android.google.cn/reference/kotlin/androidx/appcompat/widget/AppCompatEditText) | | [textarea](https://doc.dcloud.net.cn/uni-app-x/component/textarea.html) | [AppCompatEditText](https://developer.android.google.cn/reference/kotlin/androidx/appcompat/widget/AppCompatEditText) | | [web-view](https://doc.dcloud.net.cn/uni-app-x/component/web-view.html) | [WebView](https://developer.android.google.cn/reference/android/webkit/WebView) | **注意事项:** + 安卓平台页面渲染时元素才会构建View,所以元素刚创建就获取View大概率是null,推荐页面onReady时获取。 + 安卓平台获取的原生View尽可能的避免设置View的background属性,会导致元素background、border、boxshadow 失效或设置的background不生效,与设置background时机有关。 **getIOSView 获取原生 View:** ```uts //通过 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; } ``` 更多示例请参考 uts 插件 [uts-get-native-view](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/alpha/uni_modules/uts-get-native-view/utssdk/app-ios/index.uts) **组件对应原生 View 类型:** | 组件 | 对应 iOS 平台原生 View | | --------- | -------------------------------- | | [view](https://doc.dcloud.net.cn/uni-app-x/component/view.html) | [UIView](https://developer.apple.com/documentation/uikit/uiview) | | [input](https://doc.dcloud.net.cn/uni-app-x/component/input.html) | [UITextField](https://developer.apple.com/documentation/uikit/uitextfield) | | [textarea](https://doc.dcloud.net.cn/uni-app-x/component/textarea.html) | [UITextView](https://developer.apple.com/documentation/uikit/uitextview) | | [web-view](https://doc.dcloud.net.cn/uni-app-x/component/web-view.html) | [WKWebView](https://developer.apple.com/documentation/webkit/wkwebview) | **注意事项:** + iOS平台 uvue 环境使用 js 驱动无法处理原生类型,getIOSView 方法需要在 uts 插件中使用。 + iOS平台页面渲染时元素才会构建View,所以元素刚创建就获取 View 大概率是 null,推荐页面 onReady 时获取。 ```ts // 找到需要截图节点 const view = uni.getElementById('snapshot-content')! // 进行截图 view.takeSnapshot({ success: function (res) { // 打印截图文件临时路径 console.log(res.tempFilePath) uni.showToast({ title: '截图成功,路径:' + res.tempFilePath, icon: "none" }) }, fail: function (res) { console.log(res) uni.showToast({ icon: 'error', title: '截图失败' }) } }) ``` 完整示例代码参考[hello uni-app x](https://gitcode.net/dcloud/hello-uni-app-x/-/blob/alpha/pages/API/element-takesnapshot/element-takesnapshot.uvue) * 截图会在应用沙盒目录的cache目录产生临时文件,位置[详见](../api/file-system-spec.md#cache)。 * app端如需主动删除临时文件,使用[uni.getFileSystemManager](../api/get-file-system-manager.md)。 * app端list-view、web-view组件性能优化仅渲染屏幕显示的内容,所以截图仅能截取到当前屏幕展示的内容。 * app端scroll-view组件设置padding后,截图内容不会包含padding区域。 * app端由于组件背景默认透明,所以截图图片默认底色为白色。