Ver a proveniência

improved hotspot dragging

pull/880/head
Nico Höllerich há 7 anos
ascendente
cometimento
2bdb89a1c0
1 ficheiros alterados com 33 adições e 16 eliminações
  1. +33
    -16
      src/js/pannellum.js

+ 33
- 16
src/js/pannellum.js Ver ficheiro

@@ -40,6 +40,7 @@ var _this = this;
var config,
renderer,
preview,
draggingHotSpot,
isUserInteracting = false,
latestInteraction = Date.now(),
onPointerDownPointerX = 0,
@@ -664,7 +665,7 @@ function onDocumentMouseDown(event) {
container.focus();
// Only do something if the panorama is loaded
if (!loaded || !config.draggable) {
if (!loaded || !config.draggable || config.draggingHotSpot) {
return;
}
@@ -749,7 +750,10 @@ function mouseEventToCoords(event) {
* @param {MouseEvent} event - Document mouse move event.
*/
function onDocumentMouseMove(event) {
if (isUserInteracting && loaded) {
if (draggingHotSpot) {
moveHotSpot(draggingHotSpot, event)
}
else if (isUserInteracting && loaded) {
latestInteraction = Date.now();
var canvas = renderer.getCanvas();
var canvasWidth = canvas.clientWidth,
@@ -773,6 +777,7 @@ function onDocumentMouseMove(event) {
* @private
*/
function onDocumentMouseUp(event) {
draggingHotSpot = null;
if (!isUserInteracting) {
return;
}
@@ -797,7 +802,7 @@ function onDocumentMouseUp(event) {
*/
function onDocumentTouchStart(event) {
// Only do something if the panorama is loaded
if (!loaded || !config.draggable) {
if (!loaded || !config.draggable || draggingHotSpot) {
return;
}

@@ -840,6 +845,11 @@ function onDocumentTouchStart(event) {
* @param {TouchEvent} event - Document touch move event.
*/
function onDocumentTouchMove(event) {
if (draggingHotSpot) {
moveHotSpot(draggingHotSpot, event.targetTouches[0])
return;
}

if (!config.draggable) {
return;
}
@@ -888,6 +898,7 @@ function onDocumentTouchMove(event) {
* @private
*/
function onDocumentTouchEnd() {
draggingHotSpot = null;
isUserInteracting = false;
if (Date.now() - latestInteraction > 150) {
speed.pitch = speed.yaw = 0;
@@ -941,6 +952,7 @@ function onDocumentPointerMove(event) {
* @param {PointerEvent} event - Document pointer up event.
*/
function onDocumentPointerUp(event) {
draggingHotSpot = null;
if (event.pointerType == 'touch') {
var defined = false;
for (var i = 0; i < pointerIDs.length; i++) {
@@ -1715,27 +1727,32 @@ function createHotSpot(hs) {
span.style.cursor = 'pointer';
}
if(hs.draggable){
var dragListener = function (e) {
var coords = mouseEventToCoords(e);
hs.pitch = coords[0];
hs.yaw = coords[1];
renderHotSpot(hs);
}
div.addEventListener('mousedown', (e) => {
div.addEventListener('mouseleave', (e) => {
div.removeEventListener('mousemove', dragListener);
});
div.addEventListener('mouseup', (e) => {
div.removeEventListener('mousemove', dragListener);
});
div.addEventListener('mousemove', dragListener);
draggingHotSpot = hs;
});
div.addEventListener('touchstart', (e) => {
draggingHotSpot = hs;
})
}
hs.div = div;
};

/**
*
* @param {hotspot} hs
* @param {MouseEvent} event
* @private
*
*/
function moveHotSpot(hs, event){
let coords = mouseEventToCoords(event);
hs.pitch = coords[0];
hs.yaw = coords[1];
renderHotSpot(hs);
};

/**
* Creates hot spot elements for the current scene.
* @private
*/


Carregando…
Cancelar
Guardar