JavaScript memo
JavaScriptで選択したファイルを背景画像にする
HTMLのinputで選択した画像ファイルをJavaScriptでページの背景画像に設定したいより
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">
<title>JavaScriptで選択したファイルを背景画像にする</title>
</head>
<body>
<script>
window.addEventListener('DOMContentLoaded', ()=>{
const f=document.querySelector('#f');
f.addEventListener('change',()=>{
const content = f.files[0];
const blob=new Blob([content],{type:f.type});
document.body.style.backgroundImage=`url(${URL.createObjectURL(blob)})`;
});
});
</script>
<input type="file" id="f">
</body>
</html>
入力できるプルダウンボックス(セレクトボックス)
$('.free_dropdown').on('click focus', function () {
//「input」要素の「data-options」をカンマで分割し、配列にする。
var options = $(this).data("options").split(',');
$(this).autocomplete({
source: options,
minLength: 0, // 「0」を設定したら、全ての項目を表示する。
delay : 1,
autoFocus: false,
scroll:true,
position:{ my : "right top", at: "right bottom", collision: "flip" } //不具合対応
});
$(this).autocomplete("search", "");//この行を入れないと、初回にプルダウンボックス(セレクトボックス)が効かないという不具合がある
});
実装してみる
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">
<title>入力できるプルダウンボックス</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
</head>
<body>
<h1>入力できるプルダウンボックス</h1>
全表示:<input type=text id=in01 name=in01 class="suggest"><br>
検 索:<input type=text id=in02 name=in02 class="suggest">
<script>
var suggestList01 = ['perl','ruby','Python','PHP','javaScript','AWK','bash','java','COBOL','C','C++',];
$('#in01').autocomplete({
minLength: 0,
source: function(req,res) {
res(suggestList01);
},
});
$('#in02').autocomplete({
minLength: 0,
source: function(req,res) {
res($.grep(suggestList01,function(v){
return v.toLowerCase().indexOf(req.term.toLowerCase()) >= 0;
})
);;
},
});
$(document).on('focusin','.suggest',function() {
$(this).autocomplete('search','');
});
</script>
</body>
</html>
ローカルファイルを読み込む
ローカルファイルの読込より
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>File 読み込み</title>
<script>
<!--
function init(){
var file = document.querySelector('#getfile');
// input 変化時に読み込む
file.onchange = function (){
var fileList = file.files;
var reader = new FileReader();
reader.readAsText(fileList[0]);
//読み込み後表示
reader.onload = function () {
document.querySelector('#preview').textContent = reader.result;
};
};
};
// -->
</script>
</head>
<body onload="init();">
<input type="file" id="getfile" accept="text/*" >
<pre id="preview" ></pre>
</body>
</html>
JavaScript プログラミング講座 より
<!DOCTYPE html> <head lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ファイル読み込み</title>
</head>
<body>
JavaScript プログラミング講座 https://hakuhin.jp/js/file_reader.html
<input type="file" id="input_02_file" style="width:100%; margin:0px 0px 10px 0px;" />
結果:<br>
<textarea id="edit_02_result" style="width:100%; height:200px; margin:0px 0px 5px 0px;" disabled></textarea>
<script type="text/javascript">
<!--
// 匿名関数内で実行
(function (){
// 各エレメントを取得
var element_file = document.getElementById("input_02_file");
var element_result = document.getElementById("edit_02_result");
// ------------------------------------------------------------
// サポート状況
// ------------------------------------------------------------
if(!window.File){
element_result.value = "File クラスに対応していません。";
return;
}
if(!window.FileReader){
element_result.value = "FileReader クラスに対応していません。";
return;
}
// ------------------------------------------------------------
// 値が変化した時に実行されるイベント
// ------------------------------------------------------------
element_file.addEventListener("change" , function(e){
// ファイルが選択されたか
if(!(element_file.value)) return;
// ------------------------------------------------------------
// File オブジェクトを取得(HTML5 世代)
// ------------------------------------------------------------
// ファイルリストを取得
var file_list = element_file.files;
if(!file_list) return;
// 0 番目の File オブジェクトを取得
var file = file_list[0];
if(!file) return;
// ------------------------------------------------------------
// FileReader オブジェクトを生成
// ------------------------------------------------------------
var file_reader = new FileReader();
// ------------------------------------------------------------
// テキストとして読み込む
// ------------------------------------------------------------
//if(file.type.indexOf("text") == 0 ){
if(file.type.match(/(text|json)/)){
// ------------------------------------------------------------
// 読み込み成功時に実行されるイベント
// ------------------------------------------------------------
file_reader.onload = function(e){
element_result.value = file_reader.result;
};
// ------------------------------------------------------------
// 読み込みを開始する(テキスト文字列を得る)
// ------------------------------------------------------------
file_reader.readAsText(file);
// ------------------------------------------------------------
// バイナリとして読み込む
// ------------------------------------------------------------
}else{
// ------------------------------------------------------------
// 読み込み成功時に実行されるイベント
// ------------------------------------------------------------
file_reader.onload = function(e){
var result = "";
var ary_u8 = new Uint8Array(file_reader.result);
var i;
var str;
var num = ary_u8.length;
for(i=0;i<num;i++){
if(ary_u8[i] < 0x10){
str = "0" + ary_u8[i].toString(16);
}else{
str = ary_u8[i].toString(16);
}
if((i % 16) == 0){
result += str;
}else if((i % 16) == 15){
result += " " + str + "\n";
}else{
result += " " + str;
}
}
element_result.value = result;
};
// ------------------------------------------------------------
// 読み込みを開始する(ArrayBuffer オブジェクトを得る)
// ------------------------------------------------------------ file_reader.readAsArrayBuffer(file);
}
});
})();
//-->
</script>
</body>
</head>
クリップボードにコピーする
クリップボードにコピーするするスクリプトデモ
// クリップボードにコピー
function clipboardCopy(text){
// テキストエリアを作成
let $textarea = $('<textarea></textarea>');
// テキストエリアに文章を挿入
$textarea.text(text);
// テキストエリアを挿入
$('body').append($textarea);
// テキストエリアを選択
$textarea.select();
// コピー
document.execCommand('copy');
// テキストエリアの削除
$textarea.remove();
}
jquery $.each()
$.each() は配列やハッシュに対して繰り返し処理を行う。
$.each() は以下のように記述します。
$.each(対象のオブジェクト, function(index, val) {
繰り返し実行する処理
});)
each() を途中で終了させる
each() を途中で終了させる(いわゆる break 文を実行する(perl:last))場合は、終了を行いたい箇所で return false を記述します。
each() の処理を次へジャンプさせる
each() の処理を次へジャンプさせる(いわゆる continue 文を実行する(perl:next)場合は、ジャンプを行いたい箇所で return true を記述します。
window.close() でタブが閉じない時の解決法
JavaScriptで閉じることができるウィンドウは、JavaScriptで開かれたウィンドウのみ
ヒストリーバックで戻ってきたらもう1つヒストリーバックする
- 0:通常アクセス
- 1:再読み込み
- 2:履歴よりアクセス
window.addEventListener('pageshow',()=>{
var flg=window.performance.navigation.type;
if(flg == 2){
history.back();
}else{
$("#cmdDecide").click();
}
});
window.performance.navigation.typeは非推奨になったのでPerformanceNavigationTimingから取得する。
ただし PerformanceNavigationTiming というオブジェクトがあるわけではありません。実際に使用する場合は performanceオブジェクトからプロパティにアクセスする必要があります。
window.onload = function() {
var perfEntries = performance.getEntriesByType("navigation");
perfEntries.forEach(function(pe){
switch( pe.type ){
case 'back_forward':
history.back();
break;
default:
$("#cmdDecide").click();
}
});
}
[上][下]ボタンで行を入れ替え
<script type="text/javascript">
var selectrow = '';
var selectid = '';
$(function () {
$('.Sel').bind('click', function(){
mytr =$(this).closest('tr');
if ($(mytr).hasClass("selected")) {
$(mytr).removeClass("selected");
selectrow = "";
selectid = "";
} else {
if(selectid != ""){
$(selectid).removeClass("selected");
}
selectrow = $(this).closest('tr');
selectid = mytr;
$(mytr).addClass("selected");
}
btnUpDownDisable();
});
//上に移動ボタン押下時のイベント処理
$("#cmdUp").on("click", function() {
var row_prev = selectrow.prev('tr');
if(selectrow.prev.length){
selectrow.insertBefore(row_prev);
$(selectid).get(0).scrollIntoView({block: 'center'});
}
renumber('#bodyApplication');
});
//下に移動ボタン押下時のイベント処理
$("#cmdDown").on("click", function() { var row_next = selectrow.next('tr');
if(row_next.length){
selectrow.insertAfter(row_next);
$(selectid).get(0).scrollIntoView({block: 'center'});
}
renumber('#bodyApplication');
});
});
//上下移動ボタン活性・非活性制御
function btnUpDownDisable(){
if(selectrow == ''){
$("#cmdUp").prop("disabled",true);
$("#cmdDown").prop("disabled",true);
}else{
$("#cmdUp").prop("disabled", false);
$("#cmdDown").prop("disabled", false);
}
}
ドラッグアンドドロップでテーブルの行を入れ替える
<table id="tblApplication">
<tr><th class="alignHCenter">表</th>
<th class="alignHCenter">申請書名</th>
<th class="alignHCenter">電子申請可否</th></tr>
<tbody id="bodyApplication">
</tbody>
</table>
<script type="text/javascript">
var lineNum = -1;
<?php
foreach($ref as $row){
?>
lineNum++;
dispNum = lineNum + 1;
var lineData = '';
lineData += '<tr id="'+lineNum+'" class="high-light-row" >';
lineData += '<td id="ord Sel'+lineNum+'" class="Number Sel">'+dispNum+'</td>';
lineData += '<td class="Sel"><?=$row["vchReportName"]?></td>';
var umu = '<td><select id="umu'+lineNum+'"><option value="有">電子申請する</option><option value="無">電子申請しない</option></select></td>';
lineData += umu;
lineData += '</tr>';
$('#bodyApplication').append(lineData);
if("<?=$row['chrWebAppInput']?>" !== '1'){
$("#umu"+lineNum).val("無");
}
<?php
}
?>
//テーブルのドラッグアンドドロップを有効化
$('#bodyApplication').sortable();
//初期状態の表示順を取得
var curOrderAry = $('#bodyApplication').sortable("toArray");
//順序が入れ替わった際に表示順をUPDATE
$('#bodyApplication').on("sortupdate", function(ev, ui) {
//現在の表示順を取得
var tmpOrderAry = $(this).sortable("toArray");
var updList = [];
var num = 0;
$.each(tmpOrderAry, function(ix, value){
$('#ord'+value).text(++num);
});
});
</script>
HTML要素の位置までスクロールさせたい時
element.scrollIntoView() 参照
scrollIntoView() メソッドは、要素が(ブラウザのウィンドウ上の)表示範囲に入るまでページをスクロールします。
- 引数を省略または true とすることで上端に来るようにスクロールし、false ならば下端に来るようにスクロールします。
- オプション設定もできる
element.scrollIntoView({
behavior: 'auto',
block: 'center',
inline: 'nearest',
});
無駄にスクロール位置の計算をしなくても済みそうですね。
webStorage
webPageの状態を保持するのにはセッションストレージを使うと簡単に状態を維持できます。sessionStorageを使いパネルの状態を復元する
sessionStorage
- sessionStorage.setItem(key,value)
- sessionStorage.getItem(key)
- sessionStorage.removeItem(key)
QRコード
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<script src="jquery-qrcode-0.18.0.min.js"></script>
</head>
<body>
<div id="qrcode"></div>
<script>
$('#qrcode').qrcode({width: 64, height: 64, text: "information"});
</script>
</body>
</html>
QRコードをダウンロード
let canvas = $('#qrcode canvas');
let link = document.createElement("a");
link.href = canvas[0].toDataURL("image/png");
link.download = "qrcode.png";
link.click();
- 無精・短気・傲慢