如果使用Jquery创建Win8风格的色块超链接

1 篇文章 0 订阅
1 篇文章 0 订阅

我们在一些网页中经常会看见类似WIN8系统风格的那种色块形式,其实实现起来很简单。本文将讲解一种可以随机生成色块背景色的WIN8色块源码。供js新手们一起讨论学习。

首先,要有一个html文档。然后在<head>标签中引入Jquery:

<script src="http://code.jquery.com/jquery-latest.js"></script>

然后在<head>或者<body>标签中写入样式:

<style>
    .page-con{width:1000px;height: 135px;background: none;border: none;}
    .page-con .list{height:100%;padding: 0;width: 970px;}
    .page-con .more{height: 100%;padding-top: 26px;background: #fa6800;cursor: pointer;}
    .page-con .more a{color: #fff;}
    .page-con .list li{padding: 5px 0 5px 10px;border: none;height: 45.3%;background: #ccc;margin: 0 2px 2px 0;line-height: 1.2em;overflow: hidden;color: #fff;cursor: pointer;float: left;}
    .page-con .list li span{width: 100%;color: #fff;float: left;}
    .page-con .list li span:hover{text-decoration: underline;}
    .page-con .list li b{font-size:9px;font-family: "microsoft yahei";padding-left: 5px;}
    .page-con .list li .name{width: 100%;}
    .page-con .list li .name a{font-family:"microsoft yahei";color: #fff;}
    #elem0{width:24%;height: 99%;}
    #elem1{width: 12.6%;}
    #elem2{width:22.3%;}
    #elem3{width: 12.6%;}
    #elem4{width:22.3%;}
    #elem5{width: 12.6%;}
    #elem6{width:22.3%;}
    #elem7{width:22.3%;}
    #elem8{width: 12.6%;}
    #elem1 a,#elem3 a,#elem5 a,#elem8 a{font-size: 14px;}
    #elem2 a,#elem4 a,#elem6 a,#elem7 a{font-size: 18px;}
    #elem0 a{font-size: 22px;}
    #elem0 span{line-height: 2em;}
    #elem0 .name{text-indent: 8pt;}
    #elem0 .time{text-indent: 8pt;}
    #elem0 .firm{text-align: right;width: 95%;margin-top: 4px;}
</style>

然后在body中写入页面标签:

<div class="page-con">
    <ul class="list">
        <li id="elem0"><span>本站推荐:</span><span class="name blue"><a>主标题</a><b>副标题</b></span><span class="time">属性1</span><span class="firm">属性2</span></li>
        <li id="elem1"><span class="name blue"><a>主标题</a><b>副标题</b></span><span class="time">属性1</span><span class="firm">属性2</span></li>
        <li id="elem2"><span class="name blue"><a>主标题</a><b>副标题</b></span><span class="time">属性1</span><span class="firm">属性2</span></li>
        <li id="elem3"><span class="name blue"><a>主标题</a><b>副标题</b></span><span class="time">属性1</span><span class="firm">属性2</span></li>
        <li id="elem4"><span class="name blue"><a>主标题</a><b>副标题</b></span><span class="time">属性1</span><span class="firm">属性2</span></li>
        <li id="elem5"><span class="name blue"><a>主标题</a><b>副标题</b></span><span class="time">属性1</span><span class="firm">属性2</span></li>
        <li id="elem6"><span class="name blue"><a>主标题</a><b>副标题</b></span><span class="time">属性1</span><span class="firm">属性2</span></li>
        <li id="elem7"><span class="name blue"><a>主标题</a><b>副标题</b></span><span class="time">属性1</span><span class="firm">属性2</span></li>
        <li id="elem8"><span class="name blue"><a>主标题</a><b>副标题</b></span><span class="time">属性1</span><span class="firm">属性2</span></li>
    </ul>
</div>

最后在body中写入JS代码(关键):

<script type="text/javascript">
    $(function(){
        var interval=setInterval(function(){
            var count=$('.list li').length;
            if(count>8){
                kflist.initkf();
                clearInterval(interval);
            }
        },1);
    });
    var kflist={
        initkf:function(){
            this.randcolors();
        },
        randcolors:function(){
            for(var i=0;i<9;i++){
                var id='.list li';
                var color=this.dorand();
                $(id).eq(i).css('background',color);
                $(id).eq(i).fadeIn(1);
            }
        },
        dorand:function(){
            var result='';
            var c=['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'];
            /*
            * 下面的c_option是配置组成十六进制颜色值的6个数字的条件,
            * 其中每一组[a,b]格式的元素对应一个十六进制数字,左面的
            * a表示将上面定义的c平均分成几组,右面的b表示在分组结果
            * 中使用哪一组进行计算。比如第2条配置[2,1]表示,将上面
            * 定义的c数组平均分为两组。使用第一组['0','1','2','3',
            * '4','5','6','7','8']。然后从选出的这一组中随机选择一
            * 个数字,作为#xxxxxx这类颜色值中的第2个值。其他类同。a
            * 配置越大,分组数越多,从而色彩变化范围越小。b配置越大,
            * 分组选定越靠后,色彩越亮。反之亦然。
            * */
            var c_option=[[1,1],[2,1],[2,1],[1,1],[2,1],[1,1]];
            /*使用函数随机生成一个颜色*/
            result=this.mixfactory(c,c_option);
            /*返回结果*/
            return result;
        },
        /*
        * 随机生成颜色十六进制值的函数。
        * array:包含16进制个位数字符的数组
        * opt:每个色彩位置的色彩选择预设
        * */
        mixfactory:function(array,opt){
            var array_len=array.length;
            var opt_len=opt.length;
            var result=[];
            for(var i=0;i<opt_len;i++){
                /*取出分组数和选取的组ID*/
                var group_num=opt[i][0];
                var group_selected_id=opt[i][1];
                /*求出平均每个区分配的元素数量*/
                var divide_group_num=Math.floor(array_len/group_num);
                /*按照最大分组数生成被选择数组*/
                var selected_group=[];
                //先求出一个下限值,如果下限值<0,则令其=0
                var pre_limit=(group_selected_id-1)*divide_group_num;
                if(pre_limit<0) pre_limit=0;
                //再求出一个上限值,如果上限值>颜色数组的最大长度,则令其等于最大长度
                var last_limit=pre_limit+divide_group_num;
                if(last_limit>array_len)last_limit=array_len;
                /*截取出需要用到的数组片段*/
                var selected_c=array.slice(pre_limit,last_limit);
                /*随机选取片段中的一个元素值并输出到数组*/
                var c=selected_c[this.getrandom(divide_group_num-1)];
                result.push(c);
            }
            /*整理并返回*/
            return '#'+result.join('');
        },
        getrandom:function(num){
            return Math.floor(Math.random()*num+1);
        }
    }
</script>

说明:在JS代码中,使用JSON结构加载了事件的处理过程。

1.$(function)中的setInterval()函数:在这里考虑到,有些时候页面中的<li>标签是动态添加的。避免在9个<li>标签没有完全加载完的情况下,就执行了分配色块的函数,使得部分色块显示默认底色(白色)。Setinterval()会不停的检测<li>的数量,直到确实有9个了,才会停止计时,并执行下面的色彩配置函数。

2.色彩配置函数中(本例中的dorand函数),使用了随机的方式来获取每个<li>区域的色彩。从而保证了色块的美感搭配。在这里,我使用到的随机方法是,将一个表示十六进制颜色值的“#LMNOPQ”结构拆分成一个['L','M','N','O','P','Q']数组,然后用某种规则(本例中的mixfactory函数),给该数组的每一个元素随机取值,然后再把数组转换为十六进制颜色值。

3.关于色彩配置规则的函数mixfactory():这个函数有两个参数,第一个参数是个常量数组(长度为16,每个元素是一个不同的十六进制数);第二个参数是个配置表(数组)。mixfactory的工作原理是使用第二个参数提供的配置方式,对第一个数组进行处理,从而得到结果。具体处理方式请看上面JS中的注释。

4.关于配置表c_option:大家都知道十六进制颜色值中,前两个数代表原色R(红光)、中间两个数代表原色G(绿光)、末尾两个数代表原色B(蓝光)。而这些数从0变化到F,越靠近0,该原色光线越暗,饱和度越低;越靠近F,该原色光线越强,饱和度越高。如:#000000是黑色(没有光线),#FF0000是红色(蓝光和绿光为0,红光最亮)。所以在配置c_option的时候,一般都可以将其分成三组考虑,每组有两个数组元素,对应一个原色。比如本例中,c_option的前两个元素“[1,1],[2,1]”代表红光R的配置。如果配置中的两个数字我们用[a,b]表示,那么a越大,红色可选择范围就越小,色彩就越单调;b越大,红色越偏亮色饱和区域,色彩就越明显。反之亦然。G和B光线同理。

谢谢大家~!如果有什么问题请回帖。

附效果图一张:


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值