перетащите изображение в поле в angularjs - PullRequest
0 голосов
/ 08 июня 2018

У меня есть пример для перетаскивания изображения в angularjs.Если я перетаскиваю изображение, оно показывается вниз.Я хочу поместить изображение в саму коробку.Как я могу это сделать?

jsfiddle

Пожалуйста, посмотрите на изображение ниже.Перетащите сюда окно там вверху, смг внизу.Я хочу заглянуть внутрь самой коробки.Пожалуйста, помогите мне сделать это.

// Generated by CoffeeScript 1.6.3
// Couldn't get JSFiddle to work with CoffeeScript as advertised - Link to CoffeeScript Gist: https://gist.github.com/lsiv568/5623361
(function() {
  'use strict';
  angular.module('reusableThings', []).directive('fileDropzone', function() {
    return {
      restrict: 'A',
      scope: {
        file: '=',
        fileName: '='
      },
      link: function(scope, element, attrs) {
        var checkSize, isTypeValid, processDragOverOrEnter, validMimeTypes;
        processDragOverOrEnter = function(event) {
          if (event != null) {
            event.preventDefault();
          }
          event.dataTransfer.effectAllowed = 'copy';
          return false;
        };
        validMimeTypes = attrs.fileDropzone;
        checkSize = function(size) {
          var _ref;
          if (((_ref = attrs.maxFileSize) === (void 0) || _ref === '') || (size / 1024) / 1024 < attrs.maxFileSize) {
            return true;
          } else {
            alert("File must be smaller than " + attrs.maxFileSize + " MB");
            return false;
          }
        };
        isTypeValid = function(type) {
          if ((validMimeTypes === (void 0) || validMimeTypes === '') || validMimeTypes.indexOf(type) > -1) {
            return true;
          } else {
            alert("Invalid file type.  File must be one of following types " + validMimeTypes);
            return false;
          }
        };
        element.bind('dragover', processDragOverOrEnter);
        element.bind('dragenter', processDragOverOrEnter);
        return element.bind('drop', function(event) {
          var file, name, reader, size, type;
          if (event != null) {
            event.preventDefault();
          }
          reader = new FileReader();
          reader.onload = function(evt) {
            if (checkSize(size) && isTypeValid(type)) {
              return scope.$apply(function() {
                scope.file = evt.target.result;
                if (angular.isString(scope.fileName)) {
                  return scope.fileName = name;
                }
              });
            }
          };
          file = event.dataTransfer.files[0];
          name = file.name;
          type = file.type;
          size = file.size;
          reader.readAsDataURL(file);
          return false;
        });
      }
    };
  });

}).call(this);

(function() {
  'use strict';  
    angular.module('reusableThings').controller('TestCtrl', function($scope) {
        $scope.image = null
        $scope.imageFileName = ''
    });

}).call(this);
.dropzone {
  width: 250px;
  height: 45px;
  border: 1px solid #ccc;
  text-align: center;
  padding: 30px;
  margin: 20px;
  font-family: Arial;
}

.image-container {
    width: 300px;
    height: 300px;
}

.image-container img {
   max-width: 100%;   
}

.file-name {
   font-family: Arial;   
}
<div ng-app="reusableThings" ng-controller="TestCtrl">
    <div class="dropzone" file-dropzone="[image/png, image/jpeg, image/gif]"
                  file="image" file-name="imageFileName" data-max-file-size="3">
      <span>Drop Image Here</span>
    </div>
    <div class="image-container">
      <img ng-src={{image}} />
      <span class="file-name">{{imageFileName}}</span>
    </div>
</div>

image

1 Ответ

0 голосов
/ 08 июня 2018

Если я правильно понял, вы хотите, чтобы перетаскиваемое изображение отображалось поверх рамки, а не после нее.Я думаю, что я решил это.Найти JSFiddle здесь

Изменения:

  • Добавлен CSS в .dropzone для исправления его положения

.dropzone {
    width: 250px;
    height: 45px;
    border: 1px solid #ccc;
    text-align: center;
    padding: 30px;
    margin: 20px;
    font-family: Arial;

    /* New CSS */
    position: absolute;
    top: 0;
    left: 0;
}
  • Добавлен CSS в .image-container, чтобы зафиксировать его положение поверх позиции .dropzone.Также отрегулирована ширина для полного соответствия ширине .dropzone и добавлено z-index: 2;, чтобы изображение отображалось сверху.

.image-container {
    width: 312px;
    height: 312px;
    margin: 20px;
    position: absolute;
    top: 0;
    left: 0;
    z-index: 2;
}
  • Добавлено ng-show="image" на .image-container, чтобы оно скрывалось при отсутствии изображения, потому что в противном случае целью перетаскивания изображения был бы этот элемент вместо .dropzone из-за z-index.

<div class="image-container" ng-show="image">
  <img ng-src={{image}} />
  <span class="file-name">{{imageFileName}}</span>
</div>

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...