Как определить, где я нажимал, прежде чем нажать кнопку «Отправить» - PullRequest
0 голосов
/ 01 сентября 2018

Я столкнулся с проблемой в моем проекте. Здесь, в моем проекте, я хочу положение, где была нажата мышь после того, как я нажал на кнопку загрузки в Facebook.

Например

Problem Image

Здесь На изображении говорят, что я нажал Hello текст. Я хочу положение Hello Текст после того, как я нажму на кнопку загрузки в Facebook и добавлю изображение после текста. Аналогично случаю Hello Test. Вот где я пытался

<!doctype html>
<html lang="{{ app()->getLocale() }}">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">

        <title>Laravel</title>

        <!-- Fonts -->

    </head>
    <body>
        <div id="container">
            <h1>Medium Editor</h1>

            <form action="{{ route('editor') }}" method="post">
                {{ csrf_field() }}
                <div class="editable">
                    <textarea class="form-control textarea" name="description_en" id="description_en" ></textarea>
                </div>
                <input type="submit" value="submit">
            </form>
            <button id="facebookUpload">Facebook Upload</button>
        </div>

        <script type="text/javascript" src="{{ asset('js/jquery.js') }}"></script>
        <script>


            jQuery(document).ready(function(){
                jQuery("#facebookUpload").focusin(function(e){
                    var posX = jQuery(this).prev().focusout().position().left;
                    var posY = jQuery(this).prev().focusout().position().top;


                    jQuery('.medium-editor-element').append('<img id="theImg" src="https://cdn.filestackcontent.com/jHNwCAMlTzujKkeLIyrq" style="width:100px;height:100px;left:'+ (e.pageY - posY) + ';top:'+ (e.pageX - posX) +'" />')

                    console.log((e.pageX - posX) + ' , ' + (e.pageY - posY));
                });
            });
        </script>
    </body>
</html>

Но это не работает. Во всех случаях добавлено изображение внизу.

Вот пример

After Add Image

Я не нашел решения для этого. Пожалуйста, помогите мне. Спасибо.

1 Ответ

0 голосов
/ 01 сентября 2018

В следующий раз, пожалуйста, укажите все соответствующие детали вашего вопроса. Использование плагина, который заменяет <textarea> на <div contentEditable>, очень важно.

С вашей попыткой было 2 проблемы:

  1. Вы не можете добавить изображение в <textarea>. Но в <div contentEditable> да.
  2. Вы не сможете добавлять что-либо, основываясь на координатах щелчка х / у. Вам нужно нацелить элемент, чтобы добавить что-то до, после или внутри.

Итак, вот решение, использующее цель события для хранения элемента, по которому щелкнули.

Вы должны проверить, является ли эта цель <p>. Потому что, если это <div>, это может быть div редактора ... И было бы неприятно добавлять изображение после него.

Так что, если это не так, сохраните этот элемент в памяти с помощью переменной.

Затем, нажав кнопку FB, вы можете добавить изображение.

var editor = new MediumEditor('.editable textarea');

var clickedElement;

$(".medium-editor-element").on("click",function(e){
  
  // Making sure the click did not occured on the editor itself.
  if(e.target.tagName == "DIV" && $(e.target).hasClass("medium-editor-element")){
    return;
  }
  
  // Keep that clicked element in memory...
  clickedElement = $(e.target);
  
});

$("#facebookUpload").on("click",function(){
  if(typeof(clickedElement) != "undefined"){
    // Append an image after the last clicked element, if any.
    clickedElement.after("<img src='https://via.placeholder.com/80x80?text=IMG'>");
  }
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/medium-editor/5.23.3/css/medium-editor.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/medium-editor/5.23.3/css/themes/beagle.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/medium-editor/5.23.3/js/medium-editor.min.js"></script>

<div id="container">
  <h1>Medium Editor</h1>

  <form action="" method="post">
    <div class="editable">
      <textarea class="form-control textarea" name="description_en" id="description_en" ></textarea>
    </div>
    <input type="submit" value="submit">
  </form>
  <button id="facebookUpload">Facebook Upload</button>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...