三种常见jQuery幻灯片(jQuery slider)制作教程

好久没正儿八经的写写js代码了,再不写就生疏了,昨天无意中发现cityhouse的首页幻灯片有问题,于是今天就写了三个幻灯片实例,如果还不会用jquery写幻灯片的可以参考我之前的文章:《CSS+jQuery实现滑动幻灯片实例详解》以及两个jQuery幻灯片实例

今天的三个jQuery幻灯片其实还是两个,只不过第一种滚动的幻灯片有两种形式:分别是上下滚动和左右滚动。兼容IE6+,FF,chrome等主流浏览器。
效果和淘宝首页的幻灯片效果相同,自动播放时是一直往一个方向前进。
布局方面还算比较简洁,大家可以根据自己的需要添加内容,另外这次的幻灯片加上了文字,其实不光图片可以slider,文字也可以slider一会的。另外加了一点CSS3,就是控制按钮圆角化了(FF3.6+和chrome下有效果)。

截图

三种常见jQuery幻灯片(jQuery slider)实例

教程

iframe自适用高度代码

有不少wBox的用户反映iframe时候不可以自动撑开高度,今天在无意中看到了司徒正美的一片关于iframe自适用高度的js代码,感觉不错,转载来了。


var adjustIframe = function (id) {
    var iframe = document.getElementById(id)
    var idoc = iframe.contentWindow && iframe.contentWindow.document || iframe.contentDocument;
    var callback = function () {
        var iheight = Math.max(idoc.body.scrollHeight, idoc.documentElement.scrollHeight); //取得其高
        iframe.style.height = iheight + "px";
    }
    if (iframe.attachEvent) {
        iframe.attachEvent("onload", callback);
    } else {
        iframe.onload = callback
    }
}

javascript简单实现checkbox的全选与反选

今天上网遇到有个网友在论坛问input的checkbox全选和反选的问题,顺手总结了一下,然后写了个简单的jQuery checkbox全选反选插件,希望对大家有用。
如果是简单的实现checkbox的全选与反选可以使用下面的函数:


 function checkall(obj,cName)
 {
     var checkboxs = document.getElementsByName(cName);
     for(var i=checkboxs.length;i--;){
             checkboxs[i].checked = obj.checked;
     }
 }
//使用方法:给全选的按钮加onclick事件:onclick="checkall(this,'all[]');"

再谈Iframe的问题

iframe是可以做的事情非常多,比如通过iframe实现跨域,使用iframe解决IE6下select遮挡不住的问题,通过iframe解决Ajax的前进后退问题,再比如通过iframe实现异步上传。在很早我就写过一篇文章说明了Iframe在IE、firefox下的一些DOM操作。今天结合最近项目中遇见的iframe问题,再来谈谈iframe的一些常见问题解决方案。

IE下iframe背景透明问题

在firefox下,iframe背景默认的是透明的,在IE下默认不是透明的,我们可以使用allowTransparency='true'来设置IE下的iframe为透明,另外我们使用scrolling ='no' `frameborder=’0’`分别来实现iframe页面没有滚动条,边框宽度。

IE6下iframe不显示的问题

不得不说IE6是个操蛋的浏览器,尤其是在中国!iframe有的时候在IE6中会出现不显示的问题,主要有以下几种原因,请一一排查:

  1. 可能你的iframe没有设置宽高,例如在table不居中,计算不出来td的高度,会导致这种问题
  2. 尝试使用下面的代码来重新载入IE6下的iframe页面:
    `javascript

setTimeout(function(){
document.frames[‘fuckIE6’].location.reload();
},0)
`

  1. 传闻iframe标签中不要把src紧跟在iframe之后,也就是<iframe src='js8.in' name='fuckIE6'></iframe>是错误的,不过我没有碰见过类似的问题,为了保险起见,还是不要写成上面的样式为妙。

jQuery教程之鼠标事件篇

jQuery除了选择器之外,还封装了很多事件的处理,比如鼠标事件,所谓的鼠标事件是指用户在移动鼠标光标或者点击任意鼠标键而触发的事件,jQuery中封装了几乎所有的鼠标事件,包括点击,双击,移出,移入等鼠标事件,下面断桥残雪简单的介绍下jQuery的鼠标事件

jQuery的click事件

经典鼠标click的实例:


$("sel").click(function(){
    alert('哈哈 !');
});

jQuery的dbclick事件

一般dbclick事件的同时也会触发两次click事件。。以前我写过一篇博客简单的介绍了下jQuery的鼠标双击事件


$('p').dbclick(function(){
alert('鼠标双击!');
});
$('p').click(function(){
alert('点击了一下!');
});//大家看看结果是怎么样的?

解决jQuery中dbclick事件触发两次click事件

在jQuery事件绑定中,dbclick可以触发两次click事件。例如一个DOM元素div,既绑定了 click 事件,又绑定了 dblclick 事件,这两个事件分别要做独立的事情。事件处理上没有冲突,都可以各自完成各自的操作。双击的时候虽然是执行了 dblclick 事件,但是在这之前,也执行了click 事件,那么,如何来禁止或者说屏蔽这次多余的 click 事件呢?本文将提供给您一个比较好的解决办法。

产生原理分析

  首先,来了解一下点击事件发生的先后顺序:

单击:mousedown, mouseup, click
双击:mousedown, mouseup, click, mousedown, mouseup, click, dblclick
  由此看来,dblclick 事件发生之前,实际上发生了两次 click 事件。其中,第一次的 click 是会被屏蔽掉,但是第二次则不会,所以就出现在双击的时候,也触发 click 事件。

IE event.stopPropagation()阻止冒泡事件

在火狐Firefox、opera、IE下阻止冒泡事件是不同的代码的,火狐下使用的是event.stopPropagation(),而IE下使用的是cancelBubble,jQuery 可以使用e.stopPropagation()就可以兼容了,如果是纯粹的JavaScript需要下面的代码来统一:


if (event.stopPropagation) {
// this code is for Mozilla and Opera
event.stopPropagation();
}
else if (window.event) {
// this code is for IE
window.event.cancelBubble = true;
}

Jquery中的offset()和position()方法详解

再给普加地图添加搜索提示的时候,我使用了jQuery的offset方法,因为习惯了,结果出现了不对齐的bug,说明offset的方法获取的top和left值是错误的。后来想起了jQuery中offsetposition的两个方法有所不同,就查了一下google,原来两者是在父节点的相对绝对定位相关的。于是整理了今天的文章。

我们首先来看看这两个方法的定义。

jQuery的offset()方法

获取匹配元素在当前视口的相对偏移。
返回的对象包含两个整形属性:top 和 left。此方法只对可见元素有效。

jQuery的position()方法

获取匹配元素相对父元素的偏移。
返回的对象包含两个整形属性:top 和 left。为精确计算结果,请在补白、边框和填充属性上使用像素单位。此方法只对可见元素有效。

提高Firefox的innerHTML()的性能

Firefox 下innerHTML在操作量大了以后性能下降很厉害,有人写了个提高innhtml性能的代替方法:

function replaceHtml(el, html) {
var oldEl = typeof el === "string" ? document.getElementById(el) : el;
/*@cc_on // 原始的 innerHTML 在 IE 中的性能好一点
oldEl.innerHTML = html;
return oldEl;
@*/
var newEl = oldEl.cloneNode(false);
newEl.innerHTML = html;
oldEl.parentNode.replaceChild(newEl, oldEl);
/* 一旦我们从 DOM 上移除老的元素,则返回新的元素引用。*/
return newEl;
};

可以直接用el=replaceHtml(el, newHtml)代替el.innerHTML=newHtml

速度到底有多大提升,还得测试说话。作者提供了一个测试页面:http://stevenlevithan.com/demo/replaceHtml.html

此方法大大提高了 innerHTML 在 Firefox 和 Safari 上的性能。replaceHtml() 在 Firefox 2.0.0.6 里 destroy 与 replace 的速度各快了 473 倍以及 50 倍。而在 Safari 3.0.3 beta 上则是 create 100 倍,replace 50 倍。

解决IE6不支持max-height的bug

罪恶的IE6不支持max-height属性,不过我们可以通过jQuery来解决IE6不支持max-height,jQuery的代码如下:

$(".entry").each(function(){
    if($(this)[0].scrollHeight>500)
     $(this).css({"height":"500px"});
});

原理: 在IE6中可以通过设定height来达到max-height的效果. 循环所有要加max-height属性的DOM元素,判断他的scrollHeight大于你要设置的最大高度 如果超过了就通过设置height为最大高度,我这里使用的是[0],获取的是的DOM对象,而不是jQuery对象,详细说明见:《jQuery选择器使用详解

上面的代码还没有加入IE6的判断,完整代码如下:

if($.browser.msie&&($.browser.version === "6.0")){
$(".entry").each(function(){
if($(this)[0].scrollHeight>500)
$(this).css({"height":"500px","overflow":"hidden"});
});}

当然你也可以通过css表达式来实现IE6支持max-height属性

.entry{
//我烧验证woshao_985140e4b71711df9e5e000c295b2b8d
height: expression( this.scrollHeight > 500 ? "500px" : "auto" ); /* sets max-height for IE */
}