2017-03-23 18 views
-2

このjavascriptでは、コンポーネントのドラッグ機能が動作していません。この問題は私のサイトでのみ発生します。 SOのコードスニペットで動作します。 ここでテストを見ることができます:https://screensos.github.io/Windowing.js/test.html これはなぜ起こるのですか?事前にJavascriptが機能していません

var selected = null, // Object of the element to be moved 
 
    x_pos = 0, y_pos = 0, // Stores x & y coordinates of the mouse pointer 
 
    x_elem = 0, y_elem = 0; // Stores top, left values (edge) of the element 
 

 
// Will be called when user starts dragging an element 
 
function _drag_init(elem) { 
 
    // Store the object of the element which needs to be moved 
 
    selected = elem; 
 
    x_elem = x_pos ; 
 
    y_elem = y_pos; 
 
} 
 

 
// Will be called when user dragging an element 
 
function _move_elem(e) { 
 
    x_pos = document.all ? window.event.clientX : e.pageX; 
 
    y_pos = document.all ? window.event.clientY : e.pageY; 
 
    if (selected !== null) { 
 
     selected.style.left = (x_pos) + 'px'; 
 
     selected.style.top = (y_pos) + 'px'; 
 
    } 
 
} 
 

 
// Destroy the object when we are done 
 
function _destroy() { 
 
    selected = null; 
 
} 
 

 
// Bind the functions... 
 
var draggables = document.getElementsByClassName('draggable-element'); 
 
for(var i = 0; i < draggables.length; i++){ 
 
    draggables[i].onmousedown = function() { 
 
     _drag_init(this); 
 
     return false; 
 
    }; 
 
} 
 

 
document.onmousemove = _move_elem; 
 
document.onmouseup = _destroy;
body {padding:10px} 
 

 
.draggable-element { 
 
    width:125px; 
 
    height:125px; 
 
    background-color:#666; 
 
    color:white; 
 
    padding:10px 12px; 
 
    cursor:move; 
 
    position:relative; /* important (all position that's not `static`) */ 
 
}
<body id="body"> 
 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
 
</body>

感謝。 https://github.com/ScreensOS/Windowing.js

更新:エラーがjavascriptタグが間違った位置に配置されていたため、ローカルから試してみることができます。 headタグの後ろにではなく、bodyタグの最後の前に配置されるようになりました。

+1

'Javascriptが機能していません。質問は何ですか?コンソールのエラーを確認してください。 – Ionut

+0

githubにお問い合わせください。彼らはそれを制限するかもしれません –

+0

問題はGitHubにありません。ローカルには同じです。 – Plasmmer

答えて

0

問題は、スクリプトを読み込む場所にあります。

<html><head> 
<title>Drag</title> 

<script src="script.js"></script> 
<link rel="stylesheet" href="style.css"/> 
</head> 
<body id="body"> 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
</body> 
</html> 

<html><head> 
<title>Drag</title> 

<link rel="stylesheet" href="style.css"/> 
</head> 
<body id="body"> 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
<div class="draggable-element">Gadget!<div style="width:20px;height:100%;background:#000;position:absolute;top:0;right:-25px"></div></div> 
<script src="script.js"></script> 
</body> 
</html> 

に変更し、それが動作します。

+0

うまくいきます。ありがとう! – Plasmmer

0

問題は、DOMがロードされる前にスクリプトがdraggable-element DOM要素を取得しようとしていることです。

解決策: <script src="script.js"></script>を終了日の</body>タグの直前に置き、要素がDOMにロードされるまでスクリプトの読み込みを遅延させます。

別の方法としては、DOMがロードされた後にスクリプトを実行するために、あなたのscript.jsに

document.addEventListener("DOMContentLoaded", function(event) { 
    //code here 
}); 

を使用することができます。

+0

この質問は役に立ちます。ありがとう。 – Plasmmer