iGoogle カスタム ホーム ページ モジュールのドラッグ アンド ドロップ効果を模倣する JS メソッド_JavaScript スキル
この記事の例では、JS を使用して iGoogle のカスタム ホーム ページ モジュールのドラッグ アンド ドロップ効果を模倣する方法を説明します。皆さんの参考に共有してください。具体的な実装方法は以下の通りです。
<頭>
<スクリプトタイプ="text/javascript">
var Common = {
getEvent: function() {//ie/ff
if (document.all) {
window.event を返します;
}
func = getEvent.caller;
while (func != null) {
var arg0 = func.arguments[0];
if (arg0) {
if ((arg0.constructor == イベント || arg0.constructor == MouseEvent) || (typeof (arg0) == "object" && arg0.preventDefault && arg0.stopPropagation)) {
arg0 を返す;
}
}
func = func.caller;
}
null を返す;
}、
getMousePos: function(ev) {
if (!ev) {
ev = this.getEvent();
}
if (ev.pageX || ev.pageY) {
戻り値 {
x: ev.pageX,
y: ev.pageY
};
}
if (document.documentElement && document.documentElement.scrollTop) {
戻り値 {
x: ev.clientX document.documentElement.scrollLeft - document.documentElement.clientLeft,
y: ev.clientY document.documentElement.scrollTop - document.documentElement.clientTop
};
}
else if (document.body) {
戻り値 {
x: ev.clientX document.body.scrollLeft - document.body.clientLeft,
y: ev.clientY document.body.scrollTop - document.body.clientTop
};
}
}、
getElementPos: function(el) {
el = this.getItself(el);
var _x = 0、_y = 0;
{
を実行します
_x = el.offsetLeft;
_y = el.offsetTop;
while (el = el.offsetParent);
return { x: _x, y: _y };
}、
getItself: function(id) {
return "string" == ID の種類 ? document.getElementById(id) : id;
}、
getViewportSize: { w: (window.innerWidth) ? window.innerWidth : (document.documentElement && document.documentElement.clientWidth) ? document.documentElement.clientWidth : (document.body?document.body.offsetWidth:0)、h: (window.innerHeight) ? window.innerHeight : (document.documentElement && document.documentElement.clientHeight) ? document.documentElement.clientHeight : (document.body ? document.body.offsetHeight : 0) },
isIE: document.all ? true : false、
setOuterHtml: function(obj, html) {
var Objrange = document.createRange();
obj.innerHTML = html;
Objrange.selectNodeContents(obj);
var frag = Objrange.extractContents();
obj.parentNode.insertBefore(frag, obj);
obj.parentNode.removeChild(obj);
}、
firstChild: function(parentObj, tagName) {
if (Common.isIE) {
returnparentObj.firstChild;
}
他 {
var arr =parentObj.getElementsByTagName(タグ名);
arr[0];
を返す
}
}、
lastChild: function(parentObj, tagName) {
if (Common.isIE) {
returnparentObj.lastChild;
}
他 {
var arr =parentObj.getElementsByTagName(タグ名);
return arr[arr.length - 1];
}
}、
setCookie: 関数(名前, 値) {
document.cookie = 名前 "=" 値;
}、
getCookie: 関数(名前) {
var strCookie = document.cookie;
var arrCookie = strCookie.split("; ");
for (var i = 0; i
if (!arr[1]) {
"" を返します;
}
if (arr[0] == 名前) {
return arr[1];
}
}
"" を返します;
}、
delCookie: 関数(名前) {
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval = this.getCookie(name);
if (cval != null) document.cookie = name "=" cval ";expires=" exp.toGMTString();
}
}
var クラス = {
作成: function() {
return function() { this.init.apply(this, 引数); }
}
}
var Drag = Class.create();
Drag.prototype = {
init: function(titleBar、dragDiv、Options) {
//設置点击が透明かどうか、默认透明60%
titleBar = Common.getItself(titleBar);
ragDiv = Common.getItself(dragDiv);
this.dragArea = { maxLeft: -9999, maxRight: 9999, maxTop: -9999, maxBottom: 9999 };
if (オプション) {
this.opacity = オプション.opacity ? (isNaN(parseInt(Options.opacity)) ? 100 : parseInt(Options.opacity)) : 100;
if (オプション.エリア) {
if (Options.area.left && !isNaN(parseInt(Options.area.left))) { this.dragArea.maxLeft = Options.area.left };
if (Options.area.right && !isNaN(parseInt(Options.area.right))) { this.dragArea.maxRight = Options.area.right };
if (Options.area.top && !isNaN(parseInt(Options.area.top))) { this.dragArea.maxTop = Options.area.top };
if (Options.area.bottom && !isNaN(parseInt(Options.area.bottom))) { this.dragArea.maxBottom = Options.area.bottom };
}
}
他 {
this.opacity = 60;
}
this.originDragDiv = null;
this.tmpX = 0;
this.tmpY = 0;
this.moveable = false;
this.dragArray = [];
varragObj = this;
varragTbl = document.getElementById("dragTable");
titleBar.onmousedown = function(e) {
var ev = e || window.event || Common.getEvent();
// マウスの左ボタンによるドラッグのみを許可します。マウスの左ボタンは 1 Firefox から 0 です
If (Common.isIE && ev.button == 1 || !Common.isIE && ev.button == 0) {
}
else {
falseを返します。
}
var tmpColId;
for (c = 0; c
tmpColId = c;
休憩;
}
}
}
var tmpPosFirstChild = Common.getElementPos(Common.firstChild(dragTbl.rows[0].cells[tmpColId], "DIV"));
var tmpPosLastChild = Common.getElementPos(Common.lastChild(dragTbl.rows[0].cells[tmpColId], "DIV"));
var tmpObj = {colId: tmpColId, firstChildUp: tmpPosFirstChild.y, lastChildDown: tmpPosLastChild.y Common.lastChild(dragTbl.rows[0].cells[tmpColId], "DIV").offsetHeight };
//ドラッグアンドドロップできる各コンテナの現在の場所を保存します
ragObj.dragArray =ragObj.RegDragsPos();
//点線のボックスを挿入
var dumpedElement = document.createElement("div");
ダッシュ要素.スタイル.cssText = ドラッグDiv.style.cssText;
crashedElement.style.border = " 破線 2px #aaa ";
ダッシュ要素.style.marginBottom = "6px";
ダッシュ要素.style.width =ragDiv.offsetWidth - 2 * parseInt(dashedElement.style.borderWidth) "px" // 破線ボックスのサイズをドラッグDiv
と一致させるためにbodyWidthを減算します。
dumpedElement.style.height =ragDiv.offsetHeight - 2 * parseInt(dashedElement.style.borderWidth) "px"; //FF が正しいことを確認するために px を追加します
ダッシュ要素.style.position = "相対";
If (dragDiv.nextSibling) {
ragDiv.parentNode.insertBefore(dashedElement,ragDiv.nextSibling);
}
else {
ragDiv.parentNode.appendChild(dashedElement);
}
//ドラッグ時に絶対値
に変更
ragDiv.style.width =ragDiv.offsetWidth "px";
ragDiv.style.position = "絶対";
ragObj.moveable = true;
ragDiv.style.zIndex =ragObj.GetZindex() 1;
ragObj.tmpX = downPos.x -ragDiv.offsetLeft;
ragObj.tmpY = downPos.y -ragDiv.offsetTop;
ragDiv.setCapture();
} else {
window.captureEvents(Event.mousemove);
}
//FireFox はコンテナ内の画像のドラッグの問題を解決します
if (ev.preventDefault) {
ev.preventDefault();
ev.stopPropagation();
}
document.onmousemove = function(e) {
If (dragObj.moveable) {
var ev = e || Common.getEvent();
//IE はコンテナ内での画像のドラッグの問題を解決します
If (document.all) //IE
}
var movePos = Common.getMousePos(ev);
ragDiv.style.left = Math.max(Math.min(movePos.x -ragObj.tmpX,ragObj.dragArea.maxRight),dragObj.dragArea.maxLeft) "px";
続く;
if (movePos.x >ragObj.dragArray[k].PosLeft && movePos.x } document.onmouseup = function() { //务必写此IF内 ragDiv.style.width = ""; }; } }, window.onload = function() { window.onunload = function() { リアルなヌード写真を作成する AI 搭載アプリ 写真から衣服を削除するオンライン AI ツール。 脱衣画像を無料で AI衣類リムーバー AIヘンタイを無料で生成します。 使いやすく無料のコードエディター 中国語版、とても使いやすい 強力な PHP 統合開発環境 ビジュアル Web 開発ツール 神レベルのコード編集ソフト(SublimeText3) トマト ノベルは非常に人気のある小説閲覧ソフトウェアです。トマト ノベルでは、新しい小説や漫画を読むことができます。どの小説も漫画もとても面白いです。小説を書きたい友達もたくさんいます。お小遣いを稼いで、小説の内容を編集することもできます。 「テキストに文章を書きたいです。それで、小説はどうやって書くのですか?友達は知らないので、一緒にこのサイトに行きましょう。小説の書き方の入門を少し見てみましょう。」 Tomato Novels を使用して小説を書く方法に関するチュートリアルを共有します。 1. まず、携帯電話で Tomato Free Novels アプリを開き、パーソナル センター - ライター センターをクリックします。 2. Tomato Writer Assistant ページに移動し、次の場所で [新しい本の作成] をクリックします。小説の終わり Colorful マザーボードは中国国内市場で高い人気と市場シェアを誇っていますが、Colorful マザーボードのユーザーの中には、設定のために BIOS を入力する方法がまだ分からない人もいます。この状況に対応して、編集者はカラフルなマザーボード BIOS に入る 2 つの方法を特別に提供しました。ぜひ試してみてください。方法 1: U ディスク起動ショートカット キーを使用して、U ディスク インストール システムに直接入ります。ワンクリックで U ディスクを起動する Colorful マザーボードのショートカット キーは ESC または F11 です。まず、Black Shark インストール マスターを使用して、Black Shark インストール マスターを作成します。 Shark U ディスク起動ディスクを選択し、コンピュータの電源を入れます。起動画面が表示されたら、キーボードの ESC キーまたは F11 キーを押し続けて、起動項目を順次選択するウィンドウに入ります。「USB」の場所にカーソルを移動します。 」と表示され、その後 残念ながら、WeChat は広く使用されているソーシャル ソフトウェアであり、何らかの理由で特定の連絡先を誤って削除してしまうことがよくあります。ユーザーがこの問題を解決できるように、この記事では、削除された連絡先を簡単な方法で取得する方法を紹介します。 1. WeChat の連絡先削除メカニズムを理解します。これにより、削除された連絡先を取得できるようになります。WeChat の連絡先削除メカニズムでは、連絡先がアドレス帳から削除されますが、完全には削除されません。 2. WeChat の組み込みの「連絡先帳復元」機能を使用します。WeChat には、この機能を通じて以前に削除した連絡先をすばやく復元できる「連絡先帳復元」機能が用意されています。 3. WeChat 設定ページに入り、右下隅をクリックし、WeChat アプリケーション「Me」を開き、右上隅にある設定アイコンをクリックして設定ページに入ります。 Win11 管理者権限の取得方法のまとめ. Windows 11 オペレーティング システムでは、管理者権限は、ユーザーがシステム上でさまざまな操作を実行できるようにする非常に重要な権限の 1 つです。ソフトウェアのインストールやシステム設定の変更など、一部の操作を完了するために管理者権限の取得が必要になる場合があります。以下にWin11の管理者権限を取得する方法をまとめましたので、お役に立てれば幸いです。 1. ショートカット キーを使用する Windows 11 システムでは、ショートカット キーを使用してコマンド プロンプトをすばやく開くことができます。 今日の社会において、携帯電話は私たちの生活に欠かせないものとなっています。私たちの日常のコミュニケーション、仕事、生活のための重要なツールとして、WeChat はよく使用されます。ただし、異なるトランザクションを処理する場合は 2 つの WeChat アカウントを分離する必要がある場合があり、そのためには携帯電話が 2 つの WeChat アカウントへの同時ログインをサポートする必要があります。有名な国内ブランドとして、ファーウェイの携帯電話は多くの人に使用されていますが、ファーウェイの携帯電話で 2 つの WeChat アカウントを開設する方法は何でしょうか?このメソッドの秘密を明らかにしましょう。まず、Huawei 携帯電話で 2 つの WeChat アカウントを同時に使用する必要があります。最も簡単な方法は次のとおりです。 テクノロジーの発展に伴い、モバイルゲームは人々の生活に欠かせないものになりました。かわいいドラゴンエッグの画像と面白い孵化過程で多くのプレイヤーの注目を集めており、その中でも注目を集めているゲームの一つがモバイル版ドラゴンエッグです。プレイヤーがゲーム内で自分のドラゴンをより適切に育成し成長させることができるように、この記事ではモバイル版でドラゴンの卵を孵化させる方法を紹介します。 1. 適切な種類のドラゴン エッグを選択する プレイヤーは、ゲーム内で提供されるさまざまな種類のドラゴン エッグの属性と能力に基づいて、自分に適したドラゴン エッグの種類を慎重に選択する必要があります。 2. 孵化機のレベルをアップグレードします。プレイヤーはタスクを完了し、小道具を収集することで孵化機のレベルを向上させる必要があります。孵化機のレベルは孵化速度と孵化成功率を決定します。 3. プレイヤーはゲームに参加する必要がある孵化に必要なリソースを収集します。 携帯電話が人々の日常生活において重要なツールになるにつれて、フォント サイズの設定は重要なパーソナライゼーション要件になりました。さまざまなユーザーのニーズを満たすために、この記事では、簡単な操作で携帯電話の使用体験を向上させ、携帯電話のフォントサイズを調整する方法を紹介します。携帯電話のフォント サイズを調整する必要があるのはなぜですか - フォント サイズを調整すると、テキストがより鮮明で読みやすくなります - さまざまな年齢のユーザーの読書ニーズに適しています - フォント サイズを使用すると、視力の悪いユーザーにとって便利です携帯電話システムの設定機能 - システム設定インターフェイスに入る方法 - 設定インターフェイスで「表示」オプションを見つけて入力します。 - 「フォント サイズ」オプションを見つけて、サードパーティでフォント サイズを調整します。アプリケーション - フォント サイズの調整をサポートするアプリケーションをダウンロードしてインストールします - アプリケーションを開いて、関連する設定インターフェイスに入ります - 個人に応じて Oracleバージョンのクエリ方法を詳しく解説 Oracleは、世界で最も人気のあるリレーショナルデータベース管理システムの1つで、豊富な機能と強力なパフォーマンスを提供し、企業で広く使用されています。データベースの管理と開発のプロセスでは、Oracle データベースのバージョンを理解することが非常に重要です。この記事では、Oracle データベースのバージョン情報をクエリする方法と具体的なコード例を詳しく紹介します。単純な SQL ステートメントを実行して、Oracle データベース内の SQL ステートメントのデータベース バージョンをクエリします。
var targetDiv = null;
for (var k = 0; k
) {
targetDiv = document.getElementById(dragObj.dragArray[k].DragId);
if (movePos.y
crashedElement.style.width = targetDiv.offsetWidth - 2 * parseInt(dashedElement.style.borderWidth) "px";
targetDiv.parentNode.insertBefore(dashedElement, targetDiv);
}
他 {
//往下移
crashedElement.style.width = targetDiv.offsetWidth - 2 * parseInt(dashedElement.style.borderWidth) "px";
if (targetDiv.nextSibling) {
targetDiv.parentNode.insertBefore(dashedElement, targetDiv.nextSibling);
}
他 {
targetDiv.parentNode.appendChild(dashedElement);
}
}
}
}
for (j = 0; j
if (movePos.x > startLeft && movePos.x < startLeftragTbl.rows[0].cells[j].offsetWidth) {
///列無しDIV
if (dragTbl.rows[0].cells[j].getElementsByTagName("div").length == 0) {
rashedElement.style.width =ragTbl.rows[0].cells[j].offsetWidth - 2 * parseInt(dashedElement.style.borderWidth) "px";
ragTbl.rows[0].cells[j].appendChild(dashedElement);
}
他 {
var posFirstChild = Common.getElementPos(Common.firstChild(dragTbl.rows[0].cells[j], "DIV"));
var posLastChild = Common.getElementPos(Common.lastChild(dragTbl.rows[0].cells[j], "DIV"));
//処理特殊な状況:最上/下面MOVE時にDIVのある状況に至らず、また開始拖拽の列に戻る最上/下方
var tmpUp、tmpDown;
if (tmpObj.colId == j) {
以来
tmpDown = posLastChild.y Common.lastChild(dragTbl.rows[0].cells[j], "DIV").offsetHeight;
if (movepos.y & lt; tmpup) {/// 点線枠内に上から挿入
crashedElement.style.width = Common.firstChild(dragTbl.rows[0].cells[j], "DIV").offsetWidth - 2 * parseInt(dashedElement.style.borderWidth) "px";
ragTbl.rows[0].cells[j].insertBefore(dashedElement, Common.firstChild(dragTbl.rows[0].cells[j], "DIV"));
に
rashedElement.style.width = Common.lastChild(dragTbl.rows[0].cells[j], "DIV").offsetWidth - 2 * parseInt(dashedElement.style.borderWidth) "px";
ragTbl.rows[0].cells[j].appendChild(dashedElement);
}
}
}
};
if (dragObj.moveable) {
if (Common.isIE) {
ragDiv.releaseCapture();
}
他 {
window.releaseEvents(dragDiv.mousemove);
}
ragObj.SetOpacity(dragDiv, 100);
ragObj.moveable = false;
ドラッグオブジェクト.tmpX = 0;
ドラッグオブジェクト.tmpY = 0;
ragDiv.style.left = "";
ragDiv.style.top = "";
ドラッグDiv.style.position = "";
ダッシュ要素.parentNode.insertBefore(dragDiv, ダッシュ要素);
ダッシュ要素.parentNode.removeChild(ダッシュ要素);
}
}、
SetOpacity: function(dragDiv, n) {
if (Common.isIE) {
ragDiv.filters.alpha.opacity = n;
}
他 {
ragDiv.style.opacity = n / 100;
}
GetZindex: function() {
var maxZindex = 0;
var divs = document.getElementsByTagName("div");
for (z = 0; z < divs.length; z ) {
maxZindex = Math.max(maxZindex, divs[z].style.zIndex);
}
maxZindex を返します;
}、
RegDragsPos: function() {
var arrDragDivs = 新しい Array();
varragTbl = document.getElementById("dragTable");
var tmpDiv、tmpPos;
for (i = 0; i
if (tmpDiv.className == "dragDiv") {
tmpPos = Common.getElementPos(tmpDiv);
arrDragDivs.push({ DragId: tmpDiv.id, PosLeft: tmpPos.x, PosTop: tmpPos.y, PosWidth: tmpDiv.offsetWidth, PosHeight: tmpDiv.offsetHeight });
}
}
return arrDragDivs;
}
}
varragTbl = document.getElementById("dragTable");
if (Common.getCookie("configArr")) {
var configArr = eval("(" Common.getCookie("configArr") ")");
for (i = 0; i
ragTbl.rows[0].cells[i].appendChild(document.getElementById(configArr[i][j]));
}
}
}
new Drag("titleBar1", "dragDiv1");
new Drag("titleBar2", "dragDiv2");
new Drag("titleBar3", "dragDiv3");
new Drag("titleBar4", "dragDiv4");
new Drag("titleBar5", "dragDiv5");
}
varragTbl = document.getElementById("dragTable");
var configArr = "";
for (i = 0; i
for (j = 0; j
tmpStr = (tmpStr == "" ? "" : ",") "'"ragTbl.rows[0].cells[i].getElementsByTagName("DIV")[j].id "'";
}
configArr = (configArr == "" ? "" : ",") "[" tmpStr "]";
}
//次のような形式: [['dragDiv3','dragDiv5'],['dragDiv4','dragDiv1'],['dragDiv2']]
Common.setCookie("configArr", "[" configArr "]");
}
<スクリプトタイプ="text/javascript">
Title1
这里的字比较长....我来了....中国....中国...外国.,看一下有没有溢出>
Title2
Content2...
Title3
コンテンツ 3...
テーブル>
ホットAIツール
Undresser.AI Undress
AI Clothes Remover
Undress AI Tool
Clothoff.io
AI Hentai Generator
人気の記事
ホットツール
メモ帳++7.3.1
SublimeText3 中国語版
ゼンドスタジオ 13.0.1
ドリームウィーバー CS6
SublimeText3 Mac版
ホットトピック
7403
15
1630
14
1358
52
1268
25
1218
29
トマト無料小説アプリで小説を書く方法. トマトノベルで小説を書く方法に関するチュートリアルを共有します。
Mar 28, 2024 pm 12:50 PM
Colorful マザーボードに BIOS を入力するにはどうすればよいですか? 2つの方法を教えます
Mar 13, 2024 pm 06:01 PM
WeChat で削除された連絡先を回復する方法 (簡単なチュートリアルでは、削除された連絡先を回復する方法について説明します)
May 01, 2024 pm 12:01 PM
Win11で管理者権限を取得する方法まとめ
Mar 09, 2024 am 08:45 AM
すぐにマスター: Huawei 携帯電話で 2 つの WeChat アカウントを開く方法が明らかに!
Mar 23, 2024 am 10:42 AM
モバイルドラゴンの卵を孵化させる秘密が明らかに(モバイルドラゴンの卵をうまく孵化させる方法を段階的に教えます)
May 04, 2024 pm 06:01 PM
携帯電話の文字サイズの設定方法(携帯電話の文字サイズを簡単に調整できます)
May 07, 2024 pm 03:34 PM
Oracleバージョンの問い合わせ方法の詳細説明
Mar 07, 2024 pm 09:21 PM