изменение выбранных точек изображения при изменении размера страницы - PullRequest
0 голосов
/ 14 апреля 2020

Я выбрал координаты изображения (clientX и clientY) и показываю значок выбранной позиции. После того, как я изменил размер, выбранный браузер значок отображается в другой позиции. Для этой проблемы я могу иметь eventlistner и сделать некоторые вычисления, есть ли в любом случае, чтобы сохранить ту же позицию даже после изменения разрешения или изменения размера браузера.

Mycomponent:

import React, { Component } from "react";
import { withRouter } from "react-router-dom";
import { connect } from "react-redux";
import { showCardDetails } from "../../store/Action";
let temp = [];
class cardDetails extends Component {
  constructor(props) {
    super(props);
  }
  state = {
    left: "",
    right: "",
    coords: []
  };
  componentDidMount() {
    const { dispatch } = this.props;
    console.log(this.props.backOffice + "props");
    console.log(this.props.match.params.userId);
    let coords = JSON.parse(localStorage.getItem("coords"));
    this.setState({ coords: coords });
    window.addEventListener("resize", this.handlePress);
  }
  handlePress = () => {
    const { coords } = this.state;
    console.log(this.state);
   //anycalculation here?
  };
  handleclick = e => {
    var canvas = document.getElementById("imgCoord");
    var w = document.documentElement.clientWidth;
    var h = document.documentElement.clientHeight;
    console.log(e.offsetLeft);
    var x =
      e.clientX +
      document.body.scrollLeft +
      document.documentElement.scrollLeft;
    var y =
      e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
    let left = x + "px";
    let top = y + "px";
    let obj = {
      left: left,
      top: top,
      width: w,
      height: h
    };
    temp.push(obj);
    this.setState({ left: left, top: top, coords: temp });
    localStorage.setItem("coords", JSON.stringify(temp));
  };
  render() {
    const { backOffice, match } = this.props;
    const { left, top, coords } = this.state;
    console.log(coords);
    return (
      <React.Fragment>
        <div>
          <img
            id="imgCoord"
            src={require("../../assets/images/imageTagging.PNG")}
            onClick={$event => this.handleclick($event)}
          />
          {coords &&
            coords.map(item => (
              <img
                style={{
                  width: "20px",

                  position: "absolute",
                  left: item.left,
                  top: item.top,
                  backgroundColor: "white"
                }}
                src={require("../../assets/images/tag.png")}
                id="marker"
              />
            ))}
        </div>
      </React.Fragment>
    );
  }
}

/**
 * Redux map state
  @param {} state
  @param {} ownParams
 */
function mapStateToProps(state, ownParams) {
  console.log(state);
  return {
    backOffice: state.selectedCardData
  };
}

export default withRouter(connect(mapStateToProps)(cardDetails));

Ссылка на изображение: выбранные координаты изображения

enter image description here

после изменения размера:

enter image description here

1 Ответ

0 голосов
/ 14 апреля 2020

Я думаю, что вы используете неправильное свойство позиции для вашего изображения. Все возможности с описаниями вы можете найти здесь .

...