このようなテキストエリアとテキストがあって
そのボタンをクリックしたら選択したテキストをコンソールに出してみる
マウスの位置をX, Y座標で取得して
mouseupしたときに
- ボタンを表示する処理
- コンソールに出力する処理
を書いています
ボタンをクリックしたときもmouseupになるので
- テキストが選択されているか
- ボタンが表示されているか
を判定して処理を分けています
コード.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile("index");
}
|
意訳この機能がやること 指定したHTMLファイルを表示する |
index.html
<!DOCTYPE html>
<html>
<body>
<div id="main_div">
<div id="position" style="display:none">
<label>X</label><input type="text" id="posX">
<br>
<label>Y</label><input type="text" id="posY">
<br>
</div>
<textarea></textarea>
</div>
<script>
function elem(id) {
return document.getElementById(id);
}
var SHOW_BUTTON_TEXT = 'showBt';
/************************************
イベント
************************************/
window.onmousemove = mouseMoveFunction;
window.onmouseup = mouseUpFunction;
/************************************
マウスが動いたときに座標を取得する
************************************/
function mouseMoveFunction(e) {
elem("posX").value = e.pageX;
elem("posY").value = e.pageY;
}
/************************************
セレクトが発生したら
ボタンを作成する
************************************/
function mouseUpFunction(e) {
var targetElement = e.target;
var targetId = targetElement.id
var text = window.getSelection().toString();
if(text && targetId === SHOW_BUTTON_TEXT) {
console.log(text);
removeBt();
} else if(text && targetId !== SHOW_BUTTON_TEXT) {
createButton(text);
} else {
removeBt()
}
}
/************************************
SHOW_BUTTON_TEXTの要素があったら消す
************************************/
function removeBt() {
var targetBt = elem(SHOW_BUTTON_TEXT);
if(targetBt){
targetBt.remove();
}
}
/************************************
SHOW_BUTTON_TEXTの要素を作る
************************************/
function createButton(text) {
removeBt();
var posX = elem("posX").value;
var posY = elem("posY").value;
var button = document.createElement('button');
button.setAttribute('id', SHOW_BUTTON_TEXT);
button.textContent = 'showBt';
button.style.position = 'absolute';
button.style.left = posX + 'px';
button.style.top = posY + 'px';
elem('main_div').appendChild(button);
}
</script>
</body>
</html>
|
意訳座標の要素(非表示エリア) ラベルとX座標 ラベルとY座標 テキストエリア この機能がやること idの要素を返す 表示するボタンのテキスト マウスが動いた時にmouseMoveFunctionを実行する マウスのボタンが上がった時にmouseUpFunctionを実行する この機能がやること posXの要素にX座標の値を入れる posYの要素にY座標の値を入れる この機能がやること イベントが発生した要素を取得して そのidを取得して 選択されているテキストを取得して文字列にして もしtextが存在していて、targetIdがshowBtなら コンソールに選択されているテキストを出す showBtの要素を削除する もしtextが存在していてtargetIdがshowBtでなければ(showBt以外の要素でテキストが選択されたら) ボタンを作る それ以外なら showBtの要素を削除する この機能がやること SHOW_BUTTON_TEXTの要素を取得して 存在していたら 削除する この機能がやること removeBt()を実行する posXの値を取得して posYの値を取得して button要素を作って idを設定して textContentを設定して positionをabsoluteにして 左からの位置を設定して 上からの位置を設定して main_divの要素に追加する |


