How to make my draggable object always on top?

why my object is behind another object and also disappear when dragging around like this

enter image description here

as you can see the item or draggable object is always behind the second one, also behind all panel like this enter image description here

this is my draggabe script :

public event Action<PointerEventData> OnBeginDragHandler; public event Action<PointerEventData> OnDragHandler; public event Action<PointerEventData, bool> OnEndDragHandler; public bool FollowCursor { get; set; } = true; public Vector3 StartPosition; public bool CanDrag { get; set; } = true;  private Color backgroundColor; [SerializeField] private Image backgroundImage;  public RectTransform rectTransform; public Canvas canvas;  private void Start() {     rectTransform = GetComponent<RectTransform>();     canvas = FindObjectOfType<Canvas>();     backgroundImage = GetComponentInChildren<Image>();      backgroundColor = backgroundImage.color; }  public void OnBeginDrag(PointerEventData eventData) {     backgroundColor.a = .4f;     backgroundImage.color = backgroundColor;      if (!CanDrag)     {         return;     }      OnBeginDragHandler?.Invoke(eventData); }  public void OnDrag(PointerEventData eventData) {     backgroundColor.a = 1f;      if (!CanDrag)     {         return;     }      OnDragHandler?.Invoke(eventData);      if (FollowCursor)     {         rectTransform.anchoredPosition += eventData.delta / canvas.scaleFactor;     } }  public void OnEndDrag(PointerEventData eventData) {     backgroundColor.a = 1f;     backgroundImage.color = backgroundColor;      if (!CanDrag)     {         return;     }      var results = new List<RaycastResult>();     EventSystem.current.RaycastAll(eventData, results);      _DropArea dropArea = null;      foreach (var result in results)     {         dropArea = result.gameObject.GetComponent<_DropArea>();          if (dropArea != null)         {             break;         }     }      if (dropArea != null)     {         if (dropArea.Accept(this))         {             dropArea.Drop(this);             OnEndDragHandler?.Invoke(eventData, true);             return;         }     }      rectTransform.anchoredPosition = StartPosition;     OnEndDragHandler?.Invoke(eventData, false); }  public void OnInitializePotentialDrag(PointerEventData eventData) {     StartPosition = rectTransform.anchoredPosition;     rectTransform.SetAsFirstSibling(); }