Nativescript- Vue Проблема с панорамированием элементов вокруг - PullRequest
1 голос
/ 02 апреля 2020

Итак, я создаю создателя фотогруппы в Nativescript- vue. У меня работает панорамирование, и представление отображается правильно. Но моя проблема в том, что когда пользователь начинает панорамировать изображение вне контейнера, в котором он находится, изображение идет «позади» контейнера. И мне нужно это сделать поверх всего. Я пробовал 'z-index' с css и до сих пор нет go.

По идее, есть группа фотографий (группа не сгруппирована). И пользователь сможет щелкнуть и перетащить фотографию в группе в «пустую» группу. А это, в свою очередь, создаст новую группу. Или, если бы были другие группы, пользователь мог бы перетащить изображение и добавить его в существующую группу.

Любая помощь или предложения, спасибо заранее!

Это мой Vue Component

<template>
  <StackLayout orientation="vertical" ref="mainContainer">
  </StackLayout>
</template>

<script>
  import * as StackLayout from 'tns-core-modules/ui/layouts/stack-layout';
  import * as Image from 'tns-core-modules/ui/image';
  import _ from 'underscore';

  export default {
        name: "photo-groupings",
        props:{
            photoList:{
                type: Object,
                required: true
            }
        },
        mounted(){
            let ungrouped = this.createGroupElement();
            let newGroupElement = this.createGroupElement();
            console.log(_.keys(this.photoList));

            for(let pht of _.keys(this.photoList)){
                console.log(pht);
                console.log(this.photoList[pht]);
                ungrouped.addChild(this.createImageChild(this.photoList[pht]))
            }
            this.$refs.mainContainer.nativeView.addChild(ungrouped);
            this.$refs.mainContainer.nativeView.addChild(newGroupElement)
        },
        data(){
            return {
                photoGroups:{},
                groupElements:{},
                prevDeltaX: 0,
                prevDeltaY: 0
            }
        },
        methods:{
            createImageChild(src){
                let tempImg = new Image.Image();
                tempImg.src = src;
                tempImg.width = 100;
                tempImg.height = 100;
                tempImg.stretch = "aspectFill";
                tempImg.borderRadius = 10;
                tempImg.borderWidth = 2;
                tempImg.borderColor = "forestgreen";
                tempImg.margin = 5;
                tempImg.on('pan', this.handlePan);
                return tempImg;
            },
            createGroupElement(){
                let tempGroup = new StackLayout.StackLayout();
                tempGroup.orientation = "horizontal";
                tempGroup.margin = 5;
                tempGroup.borderColor = "black";
                tempGroup.borderRadius = 5;
                tempGroup.borderWidth = 1;
                tempGroup.minHeight = 110;
                return tempGroup;
            },
            handlePan(args){
                if (args.state === 1) // down
                {
                    this.prevDeltaX = 0;
                    this.prevDeltaY = 0;
                    console.log(args.view.getLocationRelativeTo(args.view.parent));
                    console.log(args.view.parent.getLocationInWindow());
                }
                else if (args.state === 2) // panning
                {
                    args.view.translateX += args.deltaX - this.prevDeltaX;
                    args.view.translateY += args.deltaY - this.prevDeltaY;
                    this.prevDeltaX = args.deltaX;
                    this.prevDeltaY = args.deltaY;
                }
                else if (args.state === 3) // up
                {
                    console.log("Pan release")
                }
            }
        }
    }
</script>

<style scoped>

</style>

Пример изображения, отображающего «позади» enter image description here

1 Ответ

1 голос
/ 02 апреля 2020

Лучший способ - создать элемент-призрак.

Не следует перемещать исходное изображение, а скрывать исходное изображение при обнаружении перетаскивания, создавать призрак исходного изображения и вставлять его в родительский макет. Когда пользователь отбрасывает изображение-призрак, уничтожает его и перемещает исходное изображение в место назначения.

...