点击标签,定位锚点时出现的问题:
<span class="postbtn"></span>
点击span时,想要定位在页面中的一个textarea,并把鼠标焦点移到这个textarea里。
<div class="t_box" id="tcomment">
<div class="t_input">
<textarea name="tcontent" id="tcontent"></textarea>
</div>
<div id="hash" class="t_hash"></div>
</div>
如果页面内容太少的时候,定位锚点后textarea就会跑到页面上面,显示不完整。用定位页面元素位置的方法,
判断只有当textarea的高度达到某个特定值的时候,才赋予锚点,获取页面元素的代码如下:(不同浏览器下)
//获取元素位置
function getElementPos(elementid) {
var ua = navigator.userAgent.toLowerCase();
var isOpera = (ua.indexOf('opera') != -1);
var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof
var el = document.getElementById(elementid);
if(el.parentNode === null || el.style.display == 'none') {
return false;
}
var parent = null;
var pos = [];
var box;
if(el.getBoundingClientRect) //IE
{
box = el.getBoundingClientRect();
var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
return {x:box.left + scrollLeft, y:box.top + scrollTop};
}else if(document.getBoxObjectFor) // gecko
{
box = document.getBoxObjectFor(el);
var borderLeft = (el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth):0;
var borderTop = (el.style.borderTopWidth)?parseInt(el.style.borderTopWidth):0;
pos = [box.x - borderLeft, box.y - borderTop];
} else // safari & opera
{
pos = [el.offsetLeft, el.offsetTop];
parent = el.offsetParent;
if (parent != el) {
while (parent) {
pos[0] += parent.offsetLeft;
pos[1] += parent.offsetTop;
parent = parent.offsetParent;
}
}
if (ua.indexOf('opera') != -1 || ( ua.indexOf('safari') != -1 && el.style.position == 'absolute' )) {
pos[0] -= document.body.offsetLeft;
pos[1] -= document.body.offsetTop;
}
}
if (el.parentNode) {
parent = el.parentNode;
} else {
parent = null;
}
while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML') { // account for any scrolled ancestors
pos[0] -= parent.scrollLeft;
pos[1] -= parent.scrollTop;
if (parent.parentNode) {
parent = parent.parentNode;
} else {
parent = null;
}
}
return {x:pos[0], y:pos[1]};
}
获得textarea高度:
var poss=getElementPos("tcomment");
position=poss.y;
if(position >510){//当textarea与顶部的距离大于510的时候才赋予锚点
document.getElementById("hash").innerHTML = "<a name='topiccontent'>_</a>";
}
$(".postbtn").click(function(){
this.href="#topiccontent";
var fun = function(){
$("#tcontent").focus();
}
setTimeout(fun,300);
})
在执行的时候碰到个问题,ie8不支持锚点,找了很多资料发现,可能是由于定义的锚点是一个空标签<a name="topiccontent"></a>,ie8在解析的时候因为标签没有内容忽略了,改成这样的<a name="topiccontent"> </a>就可以了!如果加上 后页面显示一个小的下划线,可以给这个a标签所在的div的样式颜色改为和背景色一致。这样就可以了!