收藏
回答

当movable-area的position为fixed或处于遮罩层中时点击事件的xy有点问题?

先贴代码

wxml:

<view>
  <view style="height: 30vh; border: 1px solid red; margin-bottom: 10rpx;">区域1</view>
  <view style="height: 50vh; border: 1px solid blue; margin-bottom: 10rpx;">区域2</view>
  <view style="height: 30vh; border: 1px solid green; margin-bottom: 10rpx;">区域3</view>
  <view style="height: 30vh; border: 1px solid black; margin-bottom: 10rpx;">区域4</view>

  <movable-area class="movable_area" bindtap="onClick">
      <movable-view class="movable_view" direction="all" bindchange="onChange" x="{{x}}" y="{{y}}" animation="{{false}}"></movable-view>
  </movable-area>

  <view style="height: 100vh;"></view>
</view>

wxss:

.movable_area {
  position: fixed; 
  top: 300rpx; 
  height: 600rpx; 
  width: 600rpx; 
  border: 1px solid black; 
  background-color: red;
}

.movable_view {
  height: 10px; 
  width: 10px; 
  background-color: white;
}

js:

Component({
  data: {
    x: 0, 
    y: 0,
  },
  methods: {

    onClick(event) {
      const sq = this.createSelectorQuery()
      const colorSelectAreaNodesRef = sq.select('.movable_area')
      colorSelectAreaNodesRef.boundingClientRect(res => {
        if (res) {
          this.setData({
            x: event.detail.x - res.left - 5,
            y: event.detail.y - res.top - 5
          })
          console.log("onClick, x: " + this.data.x + "; y: " + this.data.y)
        }
      })
      sq.exec()
    }, 
    onChange(event) {
      const {x, y} = event.detail
      console.log("onChange, x: " + x + "; y: " + y)
    }
  }
})

1. 当 movable-area 的 position 为 fixed 或处于遮罩层中时,如果页面没有滚动,点击 movable-area 任何一处 movable-view 都会移动到点击位置,比如点击顶部中间,movable-view 会移动到顶部中间

2. 但是当页面滚动了之后,再次点击 movable-area 的顶部,movable-view 只能移动到中间,而到不了顶部,与顶部的差距应该就是页面滚动的距离,难道 movable-area 点击事件 detail 中的 x、y 是相对于页面中的坐标吗(不管该元素有没有 fixed)?

3. 然而,当页面发生滚动之后,滑动 movable-view 的时候,是可以滑动到 movable-area 的任何区域的,没有受到页面滚动的影响

有一个场景,在实现拾色器的时候,就只能通过滑动 movable-view 来选取颜色了吗,禁止了 movable-area 的点击事件就不能点击某一处而移动到某一处这种快捷操作了。如果不禁止 movable-area 的点击事件,当页面原本就滚动了,点击顶部却跳到了别处,就感觉怪怪的,不知道这算不算是个问题


回答关注问题邀请回答
收藏
登录 后发表内容