123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <template>
- <view>
- <page-head :title="title"></page-head>
- <view class="uni-padding-wrap uni-common-mt">
- <view class="movable block">
- <!-- #ifndef MP-TOUTIAO -->
- <movable-area>
- <movable-view class="target" direction="all" @change="getNodeInfo">Drag</movable-view>
- </movable-area>
- <!-- #endif -->
- <!-- #ifdef MP-TOUTIAO -->
- <view class="target" @click="setPosition" :style="{top:top,left:left}">Click</view>
- <!-- #endif -->
- </view>
- <view class="movable">
- <view class="info">
- <view v-for="(item,index) in info" :key="index">
- <text class="b">{{item.key}}</text>
- <text class="span">{{item.val}}</text>
- </view>
- </view>
- </view>
- </view>
- </view>
- </template>
- <script>
- export default {
- data() {
- return {
- title: 'createSelectorQuery',
- top: 0,
- left: '0px',
- info: []
- }
- },
- onReady() {
- this.getNodeInfo()
- },
- methods: {
- setPosition() {
- this.left = Math.random() * uni.upx2px(320) + 'px'
- this.top = Math.random() * uni.upx2px(320) + 'px'
- this.getNodeInfo()
- },
- getNodeInfo() {
- uni.createSelectorQuery().select('.target').boundingClientRect().exec((ret) => {
- const rect = ret[0]
- if (rect) {
- const sort = ['left','right','top','bottom','width','height']
- const info = []
- for (let i in sort) {
- let key = sort[i]
- info.push({
- 'key': key,
- 'val': rect[key]
- })
- }
- this.info = info
- }
- });
- }
- },
- }
- </script>
- <style>
- .movable {
- display: flex;
- justify-content: center;
- }
- .block {
- height: 400rpx;
- width: 400rpx;
- background-color: #FFFFFF;
- border: 1px solid #ccc;
- position: relative;
- margin: 0 auto;
- margin-bottom: 30rpx;
- }
- movable-area {
- height: 400rpx;
- width: 400rpx;
- position: relative;
- }
- .target {
- height: 80rpx;
- width: 80rpx;
- line-height: 80rpx;
- text-align: center;
- color: #FFFFFF;
- background-color: #4cd964;
- font-size: 28rpx;
- position: absolute;
- }
- .info {
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- }
- .b {
- font-weight: bold;
- width: 150rpx;
- display: inline-block;
- }
- .span {
- width: 100rpx;
- display: inline-block;
- }
- </style>
|