一个png图片按钮效果,用css sprite,支持ie6

7 篇文章 0 订阅

一般鼠标状态三种:对应静止,鼠标经过,鼠标点击。我们都会用不同的图片去表示。

而一般背景又会用图片或渐变,那么按钮状态的图片我们又要用到透明的图片,有gif和png,很明显png能显示更多样化的效果。


为了迎合三种状态、png与ie6的问题、支持css sprite、及按钮还有自己的不同状态底图,我需要脚本的支持。于是:


QQ云下载


好了,现在只需要做的就是把icon图标填充完,然后在body写上自己的button html代码,标上想要的 图片 索引名 index,就可以。


/**
 * 2013-5-31
 * 1. 添加参数预设,可忽略 icon.pngSize,icon.gridSize,icon.rowSize
 * 2. 添加button参数,设为false则不响应鼠标。
 * 3. bg.url为空,不会添加相应的css代码。
 * 4. 添加返回当前对象
 * 5. 修复 如果 当前jq对象就是".stateIcon"元素的时候,样式名出错的问题
 * 6. 修复 icon top 计算上的错误
 */

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html;charset=gb2312">
  <title> 2013-5-30 </title>

<style>
body .button{float:left;text-align:center;line-height:20px;}
</style>

  <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
  <script>
$.fn.stateOverlayButton = function( setting, ready ){
	//数据初始化
	var defaultSetting = {
			button:true,
			box:{size:[50,50]},
			icon:{
				url:"",
				pngSize:[99999,99999], 
				gridSize:100, 
				rowSize:10
				},
			bg:{
				url:""
				}
	};
	setting = $.extend(true, defaultSetting, setting);
	var selector = this.selector
	, iconBoxName = ".stateIcon"	// 盒名
	, iconName = ".stateIcon_icon"	// 图标限大小定位置盒名
	, iconImageBoxName = ".buttonState_icon"	// 图标位移图片盒名
	, bgName = ".stateIcon_bg"		// 背景限定大小位置盒名
	, bgImageBoxName = ".buttonState_bg";		// 背景位移图片盒名
	if ( ready !== true ){
		$(function(){
			var css0 = selector;
			if (selector.indexOf(iconBoxName) == -1){
				css0 += ' ' + iconBoxName;
			}
			var styleSheet = '<style>'+
				'  '+css0+'{width:'+setting.box.size[0]+'px;height:'+setting.box.size[1]+'px;position:relative;}\n'+
				'  '+css0+' '+iconName+'{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;}\n'+
				'  '+css0+' '+iconName+' '+iconImageBoxName+'{background:url('+setting.icon.url+') 0 0 no-repeat transparent;width:'+setting.icon.pngSize[0]+'px;height:'+setting.icon.pngSize[1]+'px;_background:none;_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+setting.icon.url+'");position:absolute;top:0;left:0;}\n';
			if (setting.bg.url){
				styleSheet += '  '+css0+' '+bgName+'{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;}\n'+
				'  '+css0+' '+bgName+' '+bgImageBoxName+'{background:url('+setting.bg.url+') 0 0 no-repeat transparent;width:'+setting.box.size[0]+'px;height:'+(setting.box.size[1]*3)+'px;_background:none;_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+setting.bg.url+'");position:absolute;top:0;left:0;}\n';
			}
			styleSheet += '</style>';
			
			$("head").append($(styleSheet));
			$(selector).stateOverlayButton(setting, true);
		});
		return this;
	}
	var parent = this;		// 事件响应元素
	if ( parent.length > 1 ){
		parent.each(function(i,v){ $(v).stateOverlayButton(setting, true) });
		return;
	}
	var template = '<div class="'+bgName.substr(1)+'"><div class="'+bgImageBoxName.substr(1)+'"></div></div><div class="'+iconName.substr(1)+'"><div class="'+iconImageBoxName.substr(1)+'"></div></div>';	// html
	var iconGridSize = setting.icon.gridSize,iconGridRowSize = setting.icon.rowSize,iconOffset,iconIndex=0;
	var _parent = parent;									// 事件容器
	var _iconRoot;									// 图标窗口
	if ( _parent.is( iconBoxName ) ){
		_iconRoot = _parent;
	}else{
		_iconRoot = _parent.find(iconBoxName);
	}

	if ( _iconRoot == null || _iconRoot.length == 0 ){	// 如果没有找到相应的盒名,则不要继续
		return;
	}
	_iconRoot.append(template);
	iconIndex = parseInt(_iconRoot.attr("index"));				// 图标所有索引
	var _size = { width:setting.box.size[0], height:setting.box.size[1] };	// 大小
	iconOffset = [( ( iconGridSize - _size.width ) / -2 ) - ( iconIndex % iconGridRowSize * iconGridSize ),
			( ( iconGridSize - _size.height ) / -2 ) - Math.floor( iconIndex / iconGridRowSize ) * iconGridSize];
	var _bg = _iconRoot.find( bgImageBoxName+":eq(0)" );				// 底图,使用css sprite
	var _icon = _iconRoot.find( iconImageBoxName+":eq(0)" );
	_icon.css( {left:iconOffset[0]+"px",top:iconOffset[1]+"px"} );
	if (setting.button === true){
		_parent.on({
			mouseenter: function(e){
				_bg.css("top", "-"+_size.height+"px");
			},
			mouseleave: function(e){
				_bg.css("top", "0");
			},
			mousedown: function(e){
				_bg.css("top", "-"+(_size.height*2)+"px");
				_icon.css({left:iconOffset[0]+1+"px",top:iconOffset[1]+1+"px"});
			},
			mouseup: function(e){
				_bg.css("top", "-"+_size.height+"px");
				_icon.css({left:iconOffset[0]+"px",top:iconOffset[1]+"px"});
			}
		});
		if (setting.click){
			_parent.on("click",setting.click);
		}
	}
};

$.fn.stateOverlayButton=function(setting,ready){var defaultSetting={button:true,box:{size:[50,50]},icon:{url:"",pngSize:[99999,99999],gridSize:100,rowSize:10},bg:{url:""}};setting=$.extend(true,defaultSetting,setting);var selector=this.selector,iconBoxName=".stateIcon",iconName=".stateIcon_icon",iconImageBoxName=".buttonState_icon",bgName=".stateIcon_bg",bgImageBoxName=".buttonState_bg";if(ready!==true){$(function(){var css0=selector;if(selector.indexOf(iconBoxName)==-1){css0+=' '+iconBoxName}var styleSheet='<style>  '+css0+'{width:'+setting.box.size[0]+'px;height:'+setting.box.size[1]+'px;position:relative;}\n  '+css0+' '+iconName+'{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;}\n  '+css0+' '+iconName+' '+iconImageBoxName+'{background:url('+setting.icon.url+') 0 0 no-repeat transparent;width:'+setting.icon.pngSize[0]+'px;height:'+setting.icon.pngSize[1]+'px;_background:none;_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+setting.icon.url+'");position:absolute;top:0;left:0;}\n';if(setting.bg.url){styleSheet+='  '+css0+' '+bgName+'{position:absolute;top:0;left:0;width:100%;height:100%;overflow:hidden;}\n  '+css0+' '+bgName+' '+bgImageBoxName+'{background:url('+setting.bg.url+') 0 0 no-repeat transparent;width:'+setting.box.size[0]+'px;height:'+(setting.box.size[1]*3)+'px;_background:none;_filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+setting.bg.url+'");position:absolute;top:0;left:0;}\n'}styleSheet+='</style>';$("head").append($(styleSheet));$(selector).stateOverlayButton(setting,true)});return this}var parent=this;if(parent.length>1){parent.each(function(i,v){$(v).stateOverlayButton(setting,true)});return}var template='<div class="'+bgName.substr(1)+'"><div class="'+bgImageBoxName.substr(1)+'"></div></div><div class="'+iconName.substr(1)+'"><div class="'+iconImageBoxName.substr(1)+'"></div></div>';var iconGridSize=setting.icon.gridSize,iconGridRowSize=setting.icon.rowSize,iconOffset,iconIndex=0;var _parent=parent;var _iconRoot;if(_parent.is(iconBoxName)){_iconRoot=_parent}else{_iconRoot=_parent.find(iconBoxName)}if(_iconRoot==null||_iconRoot.length==0){return}_iconRoot.append(template);iconIndex=parseInt(_iconRoot.attr("index"));var _size={width:setting.box.size[0],height:setting.box.size[1]};iconOffset=[((iconGridSize-_size.width)/-2)-(iconIndex%iconGridRowSize*iconGridSize),((iconGridSize-_size.height)/-2)-Math.floor(iconIndex/iconGridRowSize)*iconGridSize];var _bg=_iconRoot.find(bgImageBoxName+":eq(0)");var _icon=_iconRoot.find(iconImageBoxName+":eq(0)");_icon.css({left:iconOffset[0]+"px",top:iconOffset[1]+"px"});if(setting.button===true){_parent.on({mouseenter:function(e){_bg.css("top","-"+_size.height+"px")},mouseleave:function(e){_bg.css("top","0")},mousedown:function(e){_bg.css("top","-"+(_size.height*2)+"px");_icon.css({left:iconOffset[0]+1+"px",top:iconOffset[1]+1+"px"})},mouseup:function(e){_bg.css("top","-"+_size.height+"px");_icon.css({left:iconOffset[0]+"px",top:iconOffset[1]+"px"})}});if(setting.click){_parent.on("click",setting.click)}}};


$(".button").stateOverlayButton(
	{
		box	:{ size: [60, 60] },	// 图片按钮尺寸
		icon:{ url: "icon.png"},// pngSize: [2000, 3000], gridSize: 100, rowSize: 10 },	// url:icon图片,pngSize:图片大小,gridSize:图片中一格的大小,rowSize:一行有多少个图标
		bg	:{ url: "icon_bg.png" }//,	// 底图图片,可选
		//click	: function(e){alert(e.handleObj.handler);}	// 点击事件,可选
	}
);

  </script>
 </head>

<body bgcolor="#ffffee">

<style>.button{display:inline-block;width:60px;height:60px;}</style>
<a class="button" href="http://www.baidu.com" target="_blank"><div class="stateIcon" index="15"></div><br />标题</a>

<div class="button"><div class="stateIcon" index="2"></div><br />标题1</div>
<div class="button"><div class="stateIcon" index="10"></div><br />标题2</div>
<div class="button"><div class="stateIcon" index="19"></div><br />标题3</div>

</body>
</html>





icon_bg.png



icon.png



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值