ホームページ  >  記事  >  ウェブフロントエンド  >  js は、指定されたコントロールの入力カーソルの座標を取得します。IE、Chrome、Firefox およびその他の主流ブラウザーの JavaScript スキルと互換性があります。

js は、指定されたコントロールの入力カーソルの座標を取得します。IE、Chrome、Firefox およびその他の主流ブラウザーの JavaScript スキルと互換性があります。

WBOY
WBOYオリジナル
2016-05-16 17:33:351390ブラウズ
コードを直接アップロードします
コードをコピーします コードは次のとおりです:

var kingwolfofsky = {
/**
* ページ内の入力カーソルの座標を取得します
* @param {HTMLElement} 入力ボックス要素
* @return {Object} return left、top、bottom
*/
getInputPositon: function (elem) {
if (document.selection) { //IE サポート
elem。集中();
var Sel = document.selection.createRange();
return {
left: Sel.boundingLeft,
top: Sel.boundingTop,
bottom: Sel.boundingTop Sel.boundingHeight
};
} else {
var that = this;
var cloneDiv = '{$clone_div}'、cloneLeft = '{$cloneLeft}'、cloneFocus = '{$cloneFocus}'、cloneRight = '{$cloneRight}';
var none = ' ;
var div = elem[cloneDiv] || document.createElement('div')、フォーカス = elem[cloneFocus] || document.createElement('スパン');
var text = elem[cloneLeft] || document.createElement('スパン');
var offset = that._offset(elem)、index = this._getFocus(elem)、focusOffset = { left: 0, top: 0 };
if (!elem[cloneDiv]) {
elem[cloneDiv] = div、elem[cloneFocus] = フォーカス;
elem[cloneLeft] = テキスト;
div.appendChild(テキスト);
div.appendChild(focus);
document.body.appendChild(div);
focus.innerHTML = '|';
focus.style.cssText = 'display:inline-block;width:0px;overflow:hidden;z-index:-100;word-wrap:break-word;word-break:break-all;';
div.className = this._cloneStyle(elem);
div.style.cssText = 'visibility:hidden;display:inline-block;position:absolute;z-index:-100;word-wrap:break-word;word-break:break-all;overflow:hidden ;';
};
div.style.left = this._offset(elem).left "px";
div.style.top = this._offset(elem).top "px";
var strTmp = elem.value.substring(0,index).replace(//g, '>').replace(/n/ g, '
').replace(/s/g, none);
text.innerHTML = strTmp;
focus.style.display = 'インラインブロック';
試してください { focusOffset = this._offset(focus);キャッチ (e) { };
focus.style.display = 'なし';
return {
left: focusOffset.left,
top: focusOffset.top,
bottom: focusOffset.bottom
};
}
},
// 克隆元素样式并返类
_cloneStyle: function (elem,cache) {
if (!cache && elem['${cloneName}']) return elem['${cloneName}'];
var className, name, rstyle = /^(number|string)$/;
var rname = /^(content|outline|outlineWidth)$/; //オペラ: コンテンツ; IE8:アウトライン && アウトライン幅
var cssText = [], sStyle = elem.style;
for (sStyle の名前) {
if (!rname.test(name)) {
val = this._getStyle(elem, name);
if (val !== '' && rstyle.test(typeof val)) { // Firefox 4
name = name.replace(/([A-Z])/g, "-$1").toLowerCase ();
cssText.push(名前);
cssText.push(':');
cssText.push(val);
cssText.push(';');
};
};
};
cssText = cssText.join('');
elem['${cloneName}'] = className = 'clone' (新しい日付).getTime();
this._addHeadStyle('.' className '{' cssText '}');
クラス名を返します;
},
// 向页头插入样式
_addHeadStyle: function (content) {
var style = this._style[document];
if (!style) {
style = this._style[document] = document.createElement('style');
document.getElementsByTagName('head')[0].appendChild(style);
};
style.styleSheet && (style.styleSheet.cssText = content) || style.appendChild(document.createTextNode(content));
},
_style: {},
// 取得最终样式
_getStyle: 'getComputedStyle' ウィンドウ内 ? function (elem, name) {
return getComputedStyle(elem, null)[name];
} : function (elem, name) {
return elem.currentStyle[name];
},
// 获取光标在文本框の位置
_getFocus: function (elem) {
varindex = 0;
if (document.selection) {// IE サポート
elem.focus();
var Sel = document.selection.createRange();
if (elem.nodeName === 'TEXTAREA') {//textarea
var Sel2 = Sel.duplicate();
Sel2.moveToElementText(elem);
変数インデックス = -1;
while (Sel2.inRange(Sel)) {
Sel2.moveStart('character');
インデックス;
};
}
else if (elem.nodeName === 'INPUT') {// input
Sel.moveStart('character', -elem.value.length);
インデックス = Sel.text.length;
}
}
else if (elem.selectionStart || elem.selectionStart == '0') { // Firefox サポート
index = elem.selectionStart;
}
return (インデックス);
},
// 页面中の位置
_offset: function (elem) {
var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement;
var clientTop = docElem.clientTop || || body.clientTop || 0、clientLeft = docElem.clientLeft || body.clientLeft || 0;
var top = box.top (self.pageYOffset || docElem.scrollTop) - clientTop, left = box.left (self.pageXOffset || docElem.scrollLeft) - clientLeft;
return {
left: 左,
top: 上,
right: 左 box.width,
bottom: 上 box.height
};
}
};
function getPosition(ctrl) {
var p = kingwolfofsky.getInputPositon(ctrl);
document.getElementById('show').style.left = p.left "px"; .getElementById('show').style.top = p.bottom "px"
}

------ -------------------------------------------------- -------------------------------------------------- ------------------

コールコード:
コードをコピー コードは次のとおりです:
var elem = document.getElementById(controlID);
var p = kingwolfofsky.getInputPositon(elem); ;/ /指定された位置の座標を取得します
p.top;//上と同じ
p.bottom;//上と同じ

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。