SQLの窓

2020年05月17日


jQuery プラグイン jquery.balloon.js で、画像吹き出しを使って吹き出しの中央に文章を配置する

オンラインで実行

※ version: 1.1.2 - 2017/04/30 を使用して調整してます

画像を使用するので、文字列と共存する為に手動で調整が必要です。その為、実際に DIV 内にコンテンツを作成して調整終了後、display:none で非表示にします。そして、jQuery の .html() で HTML 定義を取得して、contents プロパティにセットします。

tipSize は、0 に設定しないと、吹き出し用の三角部分が表示されて動作がおかしくなる可能性があります。

その為プラグイン側の処理は単純になっており、殆どは CSS の定義に依存しています
▼ マウスオーバーでバルーンが表示されます
プラグインダウンロードページ












▼ コンテンツ用( 実際は display:none で非表示にしておく )
画像吹き出し内
の中央に文章を配置
しています
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://winofsql.jp/js/jquery.balloon112.js"></script>
<style type="text/css">
/* 画像用のコンテナです */
.balloonbox {
	/* 背景画像のみ指定しています */
	background: url(http://winofsql.jp/js/balloon/orange_balloon.png) center center no-repeat;
	/* 画像サイズに合わせています */
	width: 323px;
	height: 278px;

	/* vertical-align を指定できるようにする為に必要 */
	display: table-cell;

	/* 内部文字列を縦方向に中央に表示する為 */
	vertical-align:middle;
}
/* 文字列部分のコンテナです  */
.ballooninbox {
	/* 幅を設定します。高さは文字列に依存します */
	width: 300px;

	/* border の太さを0にすると、点線が消えます */
	border: dashed 1px #B8561D;
	font-weight: bold;
	font-size: 24px;
}
/* 文字列部分の配置用クラスです  */
.balloonalign {
	/* 文字列を中央に */
	text-align: center;

	/* PRE 全体を DIV 内で中央にして、上下調整を 30px で行っています */
	margin: 30px auto 0;
}
</style>
<script type="text/javascript">
$(function() {
	$('#image_balloon').balloon(
		{
			html: true,
			contents: $("#balloon_contents").html(),
			position: "bottom",
			offsetX: 100,
			tipSize: 0,
			css: null
		}
	);
});
</script>
<pre>
▼ マウスオーバーでバルーンが表示されます
<a id="image_balloon" title="こんな感じ" href="http://urin.github.io/jquery.balloon.js/" target="_blank">プラグインダウンロードページ</a>






















▼ コンテンツ用( 実際は display:none で非表示にしておく )
<div id="balloon_contents" style='border:solid 1px #c0c0c0;width:323px;'>
	<div class='balloonbox'>
		<pre class='ballooninbox balloonalign'>画像吹き出し内<br>の中央に文章を配置<br>しています</pre>
	</div>
</div>






</pre>
上下配置の為に 『display:table-cell』 と 『vertical-align:middle』を使用しているのですが、本来の contents エリアは内部的に position:absolute の為、display:table-cell が適用されないので、ラッパーをコンテンツ内に配置し、文章はさらにその中の PRE 要素で設定しています。

上下位置の微調整の為、.balloonalign 内の margin でさらに調整して画像の中央に文字列を配置しています。

関連する記事

CSSの 『display:table-cell』 と 『margin:auto』 と 『vertical-align:middle』 を使用して、吹き出し画像の中央に文章を表示する

jquery.balloon.js を使用した簡単なバルーン( マウスオーバーで表示する追加説明用 )の作り方







posted by lightbox at 2020-05-17 18:22 | プラグイン:jQuery | このブログの読者になる | 更新情報をチェックする

jQuery プラグイン : multiselect.js の使用方法とカスタマイズ

multiselect.js のダウンロードページ

( 以下では cdnjs より利用しています )


設置が簡単な multiselect.js ですが、( select 要素を選択するだけで標準的なリストを左右二つ作成してくれます )実際使うとなると、横幅や高さやパディングの調整は必要です。

さらに、デフォルトでは選択するリストが左側と決まっていますが、これは float で作成されているので、左右を入れ替えるだけで右側を選択できるようにできます
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/multi-select/0.9.12/js/jquery.multi-select.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/multi-select/0.9.12/css/multi-select.css" />
<script type="text/javascript">
$(function(){
	$('#select_item').multiSelect({
		keepOrder: true,
		selectableHeader: "<div class='header_item'>商品候補</div>",
		selectionHeader: "<div class='header_item'>対象商品</div>",
		afterSelect: function(values){
			console.log( values[0] )
			console.log( $( "#select_item").children( "option[value='"+values+"']" ).text() )
		},
		afterDeselect: function(values){
			console.log( values[0] )
			console.log( $( "#select_item").children( "option[value='"+values+"']" ).text() )
		}
})
});
</script>
<style>
.header_item {
	padding: 5px;
	text-align: center;
	border: solid 1px #ccc;
	margin-bottom:2px;
	background-color: #eee;
}
.ms-container {
	width: 600px;
}
.ms-container .ms-selectable li.ms-elem-selectable, .ms-container .ms-selection li.ms-elem-selection {
	padding: 10px;;
}
.ms-container ul.ms-list{
  height: 300px;
}
/* 
	以下は、左右入れ替える為の CSS
	以下を設定しなければ、デフォルト仕様として左が選択可能になります   
*/
.ms-container .ms-selectable {
	float: right;
}
.ms-container .ms-selection {
	float: left;
}

</style>
<form
	method="get"
	id="target_form"
	target="my_ferame"
	action="https://winofsql.jp/php_get.php"
	accept-charset="utf-8">

	<input
		type="submit"
		name="send"
		id="send_check"
		value="送信">

	<select 
		multiple
		id="select_item"
		name="select_item[]">

		<option value='0001'>りんご</option>
		<option value='0002'>トマト</option>
		<option value='0003'>いくら</option>
		<option value='0004'>醤油</option>
		<option value='0005'>鳥唐揚</option>
		<option value='0006'>みりん</option>
		<option value='0007'>さんま</option>
		<option value='0008'>海苔</option>
		<option value='0009'>おにぎり</option>
		<option value='0010'>コロッケ</option>

	</select>
</form>
<br>
<iframe
	name="my_ferame"
	frameborder="1"
	scrolling="yes"
	width="600"
	height="200"></iframe>
キーも割り当てられていて、左右の矢印キーでリスト間移動ができ、上下矢印キーでリスト内を移動できます。
選択はスペースキーです。

イベント内(afterSelect と afterDeselect)では、values が引数となっていますが、上のソースでは、jQuery の セレクタで再度 SELECT 要素内の選択された OPTION のテキストも取得しています。
values は配列で定義されているので、values[0] として値を取得していますが、文字列と連結する場合はオリジナルサンプルでも直接使っていました
真ん中の矢印は画像なので、自作のものと置き換え可能です。 cssClass オプションの使い方 このオプションは、個別にクラスを実際定義するのでは無くコンテナにクラスを追加して個別にスタイル設定を可能にできるという意味があります。デフォルトでは、スタイルは全て ms-container というクラス名を先頭にしてセレクタが作成されているので、コンテナにクラスを追加すると、以下のような設定で cssClass に設定したクラス名を使用して個別に見栄えを変更できます。 このページでは、ms-container でクラス設定するように記述しているので、全ての multiSelect コンテンツが対象になりますが、デモ先では cssClass オプションを設定した multiSelect コンテンツ のみが設定されるようにしています。 cssClassselect_item を設定
<style>
.select_item {
	width: 600px;
}
.select_item .ms-selectable li.ms-elem-selectable, .select_item .ms-selection li.ms-elem-selection {
	padding: 10px;;
}
.select_item ul.ms-list{
  height: 300px;
}
/* 左右入れ替え */
.select_item .ms-selectable {
	float: right;
}
.select_item .ms-selection {
	float: left;
}
</style>

refresh メソッドの使い方

オリジナルページの説明には無い、refresh メソッドの意味なのですが、ソースコードを読んでみると最初に設定したオプションの状態でコンテンツを再構築していました。但し、SELECT 要素の現在の状態で再構築するので、見た目は変化ありません。

本来、最初に設定したオプションを変更してから実行すべきメソッドなのですが、オプション内容を変更する為のメソッドが用意されていません。ですが、内部で保持されているオプションの参照として、jQuery の data() メソッドで参照できる内容を使用できました。

これを使用すると、後から動的にスタイル設定やその他の設定を変更する事ができます。デモ先では、見栄えのスタイル設定を交互に変更しています( ソースもページ下部にあります )


	// ************************
	// CSS の切り替え
	// ************************
	$('#change_css').click(function(){
		var item1 = $("#select_item").data().multiselect.options.cssClass;
		if ( item1 == "target_item" ) {
			$("#select_item").data().multiselect.options.cssClass = "";	
			$("#select_item2").data().multiselect.options.cssClass = "target_item";
		}
		else {
			$("#select_item").data().multiselect.options.cssClass = "target_item";	
			$("#select_item2").data().multiselect.options.cssClass = "";
		}
		$('#select_item').multiSelect("refresh");
		$('#select_item2').multiSelect("refresh");
	});


ライセンスについて

WTFPL は、とても下品なライセンスですが、とても自由に使えるライセンスなのであまり気にしないでいいと思います。



posted by lightbox at 2020-05-17 15:32 | プラグイン:jQuery | このブログの読者になる | 更新情報をチェックする

2020年05月15日


JQuery-Snowfall で、ページや記事に花びらを舞い落ちるようにする

重要

特定の要素内のみで処理するには、その要素の中で position:absolute が作成されるので、position:relative を指定されたエリア内で行って下さい。

記事最後にこの記事内のみで舞うボタンがあります。
配布元は、Github ですがもう更新はされていないようですが、元々短いコードでとてもうまく動作します。 また、ダウンロードせずとも、cdnjs でホスティングされているのですぐ使えます。 使い方もシンプルですがオリジナルのデモページのソースを見れば、コードの読める方ならすぐ理解できると思います。ただ、deviceorientation に関しては、ソースのコメントにしか意味が書いて無かったようですが(On newer Macbooks Snowflakes will fall based on deviceorientation)、Macbook 専用の機能なのか、スマホ用なのか、ディスプレイが縦と横が変化する場合の対処モードのようです(未確認)。 以下が、一般的なWEBページ用の実装サンプルです(対象を document として、ページ全体に効果を反映させる) 元々は Snowfall なので画像なしで使えるのですが(そのほうがバリエーションも作成しやすい)、画像次第でいろいろなシチュエーションに使えると思います。 ここでは『花びら』ですが、画像の場合は2枚以上用意してそれぞれに対して snowfall を実行するといいです。また、場面によっては最初から実行したい場合もあるので、clear オプションで一旦無かった事にします。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/JQuery-Snowfall/1.7.4/snowfall.jquery.min.js"></script>
<script>
$(function(){

	$(document).snowfall('clear');

	$(document).snowfall({
		image: "https://lightbox.sakura.ne.jp/image/h1.png",
		flakeCount:10,
		minSize: 15,
		maxSize: 22,
		minSpeed:0.5,
		maxSpeed:1.5
	});

	$(document).snowfall({
		image: "https://lightbox.sakura.ne.jp/image/h2.png",
		flakeCount:10,
		minSize: 15,
		maxSize: 22,
		minSpeed:0.5,
		maxSpeed:1.5
	});

});
</script>


このコードをリアルタイムでコードを変更しながら試して見たい場合は、右上ツールバーのコピーボタンでクリップボードへコピーして、こちら(Run Page : リアルタイム html)のテキストエリアに貼り付けて『ページ作成』ボタンをクリックして下さい

▼ 実行イメージ


▼ このボタンでこの記事に花びらを



posted by lightbox at 2020-05-15 14:44 | プラグイン:jQuery | このブログの読者になる | 更新情報をチェックする

2016年11月21日


かつての FRAME のように画面下部に張り付く IFRAME を実装する jQuery プラグイン

デモページ


デモページでは、実装コードを解りやすくする為に、IFRAME 内には大きな画像を表示していますが、本来はヘッド部分で値を入力して送信の結果を IFRAME に表示する問い合わせ系アプリケーションに利用しやすくなっています。

プラグインを実装したテンプレートページ


プラグインのコード

https://lightbox.sakura.ne.jp/demo/template/static/pass1iframe/std/lboxiframe.js
$.fn.extend({ 
	lboxiframe: function(option){

		var parent = $(this);

		$("<iframe name=\""+ option.name +"\">").insertAfter($(this))
			.attr("src",option.src)
			.attr("id",option.id)
			.attr("frameborder", "0")
			.css("width", "100%" )
			;

		function control_page_iframe(iframe,parent) {
			var height = Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
			var head_height = parent.get(0).clientHeight;

			// -8 は、IE と Firefox 用。Google Chrome は 0 で正しくフィットするが、
			// IE と Firefox では、BODY のスクロールバーが表示されてしまうので調整
			iframe.css("height", (height - parseInt(head_height)-8) + "px");
		}

		$(window).on("resize", function(){
	
			$("#" + option.id ).hide();
			control_page_iframe( $("#" + option.id ), parent );
			$("#" + option.id ).show();
	
		});

		control_page_iframe( $("#" + option.id ), parent );

	}
});
Google Chrome では ブラウザにきっちり収まるのですが、Firefox と IE では、下部に多少の余白が発生します。クロスブラウジングは避けたかったのと、補正値が過去変化したのでこのようになってますが、簡単で一般的なアプリケーションであれば、特に問題は出ないと思います。

呼び出し

対象とした div の下に IFRAME を埋め込みます。
$(function(){
	$( "#wrapper" ).lboxiframe({
		src : "simple-image.html",
		id : "my_iframe",
		name : "my_iframe"
	});
});



posted by lightbox at 2016-11-21 21:05 | プラグイン:jQuery | このブログの読者になる | 更新情報をチェックする

2015年03月01日


jQuery のプラグイン jquery-color を使って、『青黒』なのか『白金』なのか、と言う『錯視』を再現しました。

色コードはそもそも、単純な数値では無いので、いろいろテクニックを使っても無理がある為、素直に既存の jQuery の プラグインで色を変化させています。

右半分の縦の二つの正方形の中の色は変化していません

右半分に注目して実行して下さい。

実行コード
<script type="text/javascript" src="http://winofsql.jp/jquery/plugins/jquery.color.js"></script>
<style>
#back_left {
	display:inline-block;
	background-color:#949494;
	width:200px;
	height:400px;
}
#back_right{
	display:inline-block;
	background-color:#C7BEA8;
	width:200px;
	height:400px;
}
#left_blue {
	position:absolute;
	top:100px;
	left:100px;
	width:100px;
	height:100px;
	border:1px #000 solid;
	background-color:#3041AB;
}
#left_black {
	position:absolute;
	top:200px;
	left:100px;
	width:100px;
	height:100px;
	border:1px #000 solid;
	background-color:#262A40;
}
#right_blue {
	position:absolute;
	top:100px;
	left:200px;
	width:100px;
	height:100px;
	border:1px #000 solid;
	background-color:#928CBB;
}
#right_black {
	position:absolute;
	top:200px;
	left:200px;
	width:100px;
	height:100px;
	border:1px #000 solid;
	background-color:#8C7D63;
}
</style>
<div style='position:relative;height:400px;'>

<div id="back_left"></div><div id="back_right"></div>

<div id="left_blue"></div>
<div id="left_black"></div>
<div id="right_blue"></div>
<div id="right_black"></div>

</div>

</div>
<script>
function doAction() {
	$("#back_right").animate({
		"backgroundColor":"#55516C"
	});
	$("#left_blue").animate({
		"backgroundColor":"#FFFFFF"
	});
	$("#left_black").animate({
		"backgroundColor":"#F5E687"
	});
}
function doAction2() {
	$("#back_right").animate({
		"backgroundColor":"#C7BEA8"
	});
	$("#left_blue").animate({
		"backgroundColor":"#3041AB"
	});
	$("#left_black").animate({
		"backgroundColor":"#262A40"
	});
}
</script>
<input type="button" value="実行" onclick='doAction()'> <input type="button" value="戻す" onclick='doAction2()'>
関連するリンク

jquery-color
Twitter の元となった、色配置の投稿





posted by lightbox at 2015-03-01 20:38 | プラグイン:jQuery | このブログの読者になる | 更新情報をチェックする

2014年12月04日


テーブル要素内のデータよりグラフを作成する jQuery プラグイン『jQuery-Visualize』をもっと使いやすく改造しました



概要

オリジナルはもう2年くらい処理の更新が無いのですが、問題点がいくつかあるので改造しました。問題点は、付属の css が中途半端なのと、上限と下限を設定できないので、一番大きい値がグラフの上限になり見にくいです。その上、Y軸のラベルの数字の間が自動なので100区切りとかになりません。そのあたりをオプションに追加しました。

enhance.js について

IE7 のエミュレーションでもグラフそのものは動作したので削除しています。

追加オプションと仕様変更



1) tableDisplay : デフォルトは true で、false にすると、データ元のテーブルを表示しない
2) top: グラフの上限
3) bottom : グラフの下限
※ yLabelInterval のデフォルトを 100 にして、Y軸の区切りの単位として変更
12月 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月
2013 712 1144 938 972 714 771 515 641 1051 1018 658 681
2014 857 1219 927 947 709 674 495 537 900 758 536 550
▼ 棒グラフ( dark 色 )


colors は、オプションで指定する場合は、データの数ぶん色を設定する必要があります。
タイトルは、th で指定する必要があります。
<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript"> 
if ( window[window.location.hostname+'.visualize'] !== true ) { 
	window[window.location.hostname+'.visualize'] = true; 
	(function(){
		var str="";
		str+="<link href=\"http://winofsql.jp/jquery/plugins/visualize/visualize-light.css\" type=\"text/css\" rel=\"stylesheet\"> \n";
		str+="<"+"script type=\"text/javascript\" src=\"http://winofsql.jp/jquery/plugins/visualize/excanvas.js\"></"+"script> \n";
		str+="<"+"script type=\"text/javascript\" src=\"http://winofsql.jp/jquery/plugins/visualize/visualize.jQuery.js\"></"+"script> \n";
		document.write(str);
	})();
} 
</script> 
<script type="text/javascript">
$(function(){
	$("#target_table").visualize({
		tableDisplay: true,
		type: "line",
		width: "400px",
		height: "200px",
		title: "電気使用量の推移",
		colors: ['#F5CE0A','#0AB2F5'],
		lineWeight: 2,
		top: 1300,
		bottom: 400,
		yLabelInterval: 100
	});
});
</script>
<style>
.visualize * {
	font-size: 12px!important;
	font-family: Arial,"メイリオ","MS Pゴシック";
}
.visualize .visualize-title {
	font-size: 24px!important;
	font-family: Arial,"メイリオ","MS Pゴシック";
}
.visualize { 
	margin: 20px 0 0 15px;
}
#target_table {
	border-collapse: collapse;
}
#target_table td, #target_table th {
	text-align: center;
	border: 1px solid #ddd;
	padding:2px 5px;
}
</style>
<table id="target_table">
<thead>
<tr>
	<td></td>
	<th>12月</th>
	<th>1月</th>
	<th>2月</th>
	<th>3月</th>
	<th>4月</th>
	<th>5月</th>
	<th>6月</th>
	<th>7月</th>
	<th>8月</th>
	<th>9月</th>
	<th>10月</th>
	<th>11月</th>
</tr>
</thead>
<tbody>
<tr>
	<th>2013</th>
	<td>712</td>
	<td>1144</td>
	<td>938</td>
	<td>972</td>
	<td>714</td>
	<td>771</td>
	<td>515</td>
	<td>641</td>
	<td>1051</td>
	<td>1018</td>
	<td>658</td>
	<td>681</td>
</tr>
<tr>
	<th>2014</th>
	<td>857</td>
	<td>1219</td>
	<td>927</td>
	<td>947</td>
	<td>709</td>
	<td>674</td>
	<td>495</td>
	<td>537</td>
	<td>900</td>
	<td>758</td>
	<td>536</td>
	<td>550</td>
</tr>
</tbody>
</table>


タグ:jquery
posted by lightbox at 2014-12-04 00:42 | プラグイン:jQuery | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり