java仿qq空间音乐播放_完美实现仿QQ空间评论回复特效

评论回复是个很常见的东西,但是各大网站实现的方式却不尽相同。大体上有两种方式

1.

a15116218a05bbf1455c5965e3a6f4c2.png

像优酷这种最常见,在输入框中@要回复的人,这种方式下,用www.cppcns.com户可以修改@。

新浪微博则是在这个基础上,弹出好友菜单。这种方式的好处是不需要任何js,css处理兼容。

33887cebbae5e9554b8674c9a11f696c.png

2.

5d4af6931bc2f53544c153f8410e0cd9.png

像qq空间这种,对回复的人整个删除。本屌感觉这种方式比较好,但这种方式有些兼容性上的细节,这个后面会详细说明。

事实上,qq空间的这种实现在效果上是兼容了ie和现代浏览器的,做的非常好。上面是chrome

ie8

24244d02fa3b67d9f8b46c70d974f1ff.png

ie7

5b7f0fecb9fc045343aa5a0602e459df.png

ie6就不上图片了,太卡了,都懂得,最后本屌会附上最终例子的,当然也兼容http://www.cppcns.comie6。

下面就说说怎么实现的。

先看看qq空间是怎么做的

chrome

8c7889702e12f2652f04041bd42110f4.png

上面可以看到,qq空间是在button中加上文字,这样在删除的时候对被回复的用户名就能整个删除了。

不过这样做还不够,首先是样式,需要把button设置成inline-block,

消除button默认的透明背景,边框,当然还有padding,margin设为0

复制代码 代码如下:

button{ border: 0; background:none; }

这时在ie6,7中插入会发现,似乎还存在padding,而且还很大

9e19fee16e85a30915a298f57886f165.png

84fa8e3734647fbc248df63a31cf5f9b.png

所以还需要加上overflow: visible;

另外属性contenteditable设置成为false,否则光标会跳到button里面,

然后在ie8下会发现,输入的时候如果有回车,然后在依次删除的过程中,会发现button标签删不掉,光标会跑到button标签前面,而且再次按右光标键或用鼠标点击button标签右边都无法让光标跑到button标签右边。事实上,qq空间在ie8中也有这个问题

ie8

a49ecd28f8e110370a7c05a1db17c1be.png

而在ie6,7下,就没有这个问题

ie7

7ee5e0c3171b47f93d6502ce5f9fc7e3.png

ie6

322ec6d4723a0c26f1dccfae523215cc.png

这里针对ie8需要对文本框绑定dBryckeydown事件回调check_comment,对ie6,7绑定了也没有问题,这里就统一的对ie绑定。

function getPositionForTextArea(ctrl) { //获取光标位置

var CaretPos = 0;

if(document.selection) {

ctrl.focus();

var Sel = document.selection.createRange();

var Sel2 = Sel.duplicate();

Sel2.moveToElementText(ctrl);

var CaretPos = -1;

while(Sel2.inRange(Sel)){

Sel2.moveStart('character');

CaretPos++;

}

}else if(ctrl.selectionStart || ctrl.selectionStart == '0'){

CaretPos = ctrl.selectionStart;

}

return (CaretPos);

}

vm.check_comment=function(e,i){

var a=getPositionForTextArea($('reply'+i));

if(e.keyCode==8&&a<3){

var pat = new RegExp("^

.*? 

$",'i');

if(pat.test(this.innerHTML))

this.innerHTML='';

}

};

光标位置<3表明光标前面就是button标签了,这时就可以清www.cppcns.com空输入框了。注意这里为了严谨,用正则表达式验证是不是button标签.

另外在正则表达式中button标签外包裹p标签,是因为ie在按回车换行时,会默认自动对前面的行包裹p标签。当然,一开始在输入框也要在button标签外包裹p标签。

8d74244d27746c99cb342edb173ad350.png

题外话

qq空间在ff上用的是img标签

5af79721253277cf820950ff23a02a3f.png

之前一直以为qq空间在现代浏览器上统一用的是img标签,写的时候才发现在chrome中用的是button标签,于是就在chrome下试了一下插入img标签,发现怎么也弄不掉边框,而且删除的时候,绑定中光标位置的判断也会和ie不一致,因为现代浏览器换行默认插入
,于是索性对chrome也用button标签。

另外在我的例子中,ff中插入button标签的话,输入框不容易获得焦点。本屌也懒得去改了,仍然是在ff中插入img标签,对应的keydown回调

if(!!-[1,]&&e.keyCode==8&&$('reply'+i).childNodes.length==2){//ff

this.innerHTML='';

retur

只用判断输入框的子节点个数就可以了。

最终效果

chrome

fa87b9d6889aa790b6f53a204ebe4b09.png

ff

ee5cf70fe11e0c9a5de8a306864d54f9.png

ie8

d5aed5a63b377688d73798eaed3aa80d.png

ie7

8be1375f5bdd6500b92f2241699085da.png

ie6

ef15290e98f1e2891327f35c87b073b2.png

附上例子下载

以上所述就是本文的全部内容了,希望大家能够喜欢。

本文标题: 完美实现仿QQ空间评论回复特效

本文地址: http://www.cppcns.com/ruanjian/java/124171.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值