KineticJs- 스테이지 레이어 크기를 조정 한 후 여러 이미지의 x 및 y 위치를 업데이트하는 방법

비제이

KineticJs를 처음 접했기 때문에 다른 x와 y에 여러 이미지를 그리기 위해 Kinectic js를 사용하여 기능을 구현해 보았습니다. 이제 스테이지 레이어 나 캔버스의 크기를 조정하고 싶었습니다. 아래에 주어진 코드를 사용하여 수행했습니다.

  window.onresize = function (event) {

                                stage.setWidth(($('#tab' + tabId).innerWidth() / 100) * 80);
                                var _images = layer.getChildren();

                                for (var i = 0; i < _images.length; i++) {
                                    if (typeof _images[i].getId() != 'undefined') {
                                        //alert(stage.getScale().x);
                                        _images[i].setX(_images[i].getX() * stage.getScale().x);
                                        layer.draw();
                                    }
                                }
                            }

하지만 이제 문제는 정의되고 있으며 이제 브라우저 크기가 스테이지보다 크기가 조정되지만 이전 x 및 y의 이미지가 고정되어 있습니다. 스테이지 레이어 나 캔버스의 리사이즈 위치에 고정시키고 싶은데, 리사이즈 전과 리사이즈 후의 이미지 링크입니다. beforeresizeafterResize .

다음은 아래에 주어진 전체 코드입니다.

$("#tabs li").each(function () {
            $(this).live("click", function () {
                clearInterval(_timer);
                var tabname = $(this).find("a").attr('name');
                tabname = $.trim(tabname.replace("#tab", ""));
                var tabId = $(this).find("a").attr('href');
                tabId = $.trim(tabId.replace("#", ""));
                $.ajax({
                    url: "/Home/GetTabsDetail",
                    dataType: 'json',
                    type: 'GET',
                    data: { tabId: tabId },
                    cache: false,
                    success: function (data) {
                        var bayStatus = [];
                        var i = 0;
                        var image_array = [];
                        var BayExist = false;
                        var BayCondition;
                        var imgSrc;
                        var CanvasBacgroundImage;
                        var _X;
                        var _bayNumber;
                        var _Y;
                        var _ZoneName;
                        $(data).each(function (i, val) {
                            i = i + 1;
                            if (!BayExist) {
                                bayStatus = val.BayStatus;
                                CanvasBacgroundImage = val.TabImageLocation;
                                BayExist = true;
                            }
                            $.each(val, function (k, v) {
                                if (k == "BayNumber") {
                                    BayCondition = bayStatus[v];
                                    _bayNumber = v;
                                    if (BayCondition == "O")
                                        imgSrc = "../../images/Parking/OccupiedCar.gif"
                                    else if (BayCondition == "N")
                                        imgSrc = "../../images/Parking/OpenCar.gif";
                                }
                                if (k == "BayX")
                                    _X = v;
                                if (k == "BayY")
                                    _Y = v;
                                if (k == "ZoneName")
                                    _ZoneName = v;
                            });
                            image_array.push({ img: imgSrc, xAxis: _X, yAxis: _Y, toolTip: _bayNumber, ZoneName: _ZoneName });
                        });
                        var imageUrl = CanvasBacgroundImage;
                        if ($('#tab' + tabId).length) {
                            // $('#tab' + tabId).css('background-image', 'url("../../images/Parking/' + imageUrl + '")');
                            var stage = new Kinetic.Stage({
                                container: 'tab' + tabId,
                                width: ($('#tab' + tabId).innerWidth() / 100) * 80,  // 80% width of the window.
                                height: 308
                            });

                            window.onresize = function (event) {

                                stage.setWidth(($('#tab' + tabId).innerWidth() / 100) * 80);
                            }
                            $('#tab' + tabId).find('.kineticjs-content').css({ 'background-image': 'url("../../images/Parking/' + imageUrl + '")', 'background-repeat': ' no-repeat', 'background-size': '100% 100%' });
                            var layer = new Kinetic.Layer();
                            var planetOverlay;
                            function writeMessage(message, _x, _y) {
                                text.setX(_x + 20);
                                text.setY(_y + 1);
                                text.setText(message);
                                layer.draw();
                            }
                            var text = new Kinetic.Text({
                                fontFamily: 'Arial',
                                fontSize: 14,
                                text: '',
                                fill: '#000',
                                width: 200,
                                height: 60,
                                align: 'center'
                            });
                            var opentooltip = new Opentip(
                                "div#tab" + tabId, //target element 
                                "dummy", // will be replaced
                                "", // title
                                {
                                showOn: null // I'll manually manage the showOn effect
                            });
                            Opentip.styles.win = {
                                borderColor: "black",
                                shadow: false,
                                background: "#EAEAEA"
                            };
                            Opentip.defaultStyle = "win";
                            // _timer = setInterval(function () {
                            for (i = 0; i < image_array.length; i++) {
                                img = new Image();

                                img.src = image_array[i].img;
                                planetOverlay = new Kinetic.Image({
                                    x: image_array[i].xAxis,
                                    y: image_array[i].yAxis,
                                    image: img,
                                    height: 18,
                                    width: 18,
                                    id: image_array[i].toolTip,
                                    name: image_array[i].ZoneName
                                });

                                planetOverlay.on('mouseover', function () {
                                    opentooltip.setContent("<span style='color:#87898C;'><b>Bay:</b></span> <span style='color:#25A0D3;'>" + this.getId() + "</span><br> <span style='color:#87898C;'><b>Zone:</b></span><span  style='color:#25A0D3;'>" + this.getName() + "</span>");
                                    //writeMessage("Bay: " + this.getId() + " , Zone: " + this.getName(), this.getX(), this.getY());//other way of showing tooltip
                                    opentooltip.show();
                                    $("#opentip-1").offset({ left: this.getX(), top: this.getY() });
                                });
                                planetOverlay.on('mouseout', function () {
                                    opentooltip.hide();
                                    // writeMessage('');
                                });
                                planetOverlay.createImageHitRegion(function () {
                                    layer.draw();
                                });
                                layer.add(planetOverlay);
                                layer.add(text);
                                stage.add(layer);
                            }
                            //  clearInterval(_timer);
                            //$("#tab3 .kineticjs-content").find("canvas").css('background-image', 'url("' + imageUrl + '")');

                            //  },
                            //  500)

                        }
                    }
                    ,
                    error: function (result) {
                        alert('error');
                    }
                });
            });
        });

크기를 조정하기 전의 위치에 아이콘을 유지하고 싶습니다. 나는 시도했지만이 작업을 수행하는 데 올바른 솔루션을 얻을 수 없었습니다.

이미지의 x, y 위치를 어떻게 업데이트 할 수 있습니까? 모든 제안을 주시면 감사하겠습니다.

감사합니다.

상표

window.resize에서는 배율 인수로 스테이지 너비를 변경합니다.

그 배율을 저장하십시오.

그런 다음 이미지의 'x'좌표에 해당 배율 인수를 곱하십시오.

다음과 같이 이미지의 'x'위치를 재설정 할 수 있습니다.

yourImage.setX( yourImage.getX() * scalingFactor );

layer.draw();

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관