3d轮播图——类似酷狗的轮播

       说到轮播图,其实只要是跟web开发相关的无论是前端后端应该都不陌生,各种各样的轮播图,从以前的单纯的平面山水画遮盖滑动或滚动,到Jquery的animate甚至是h5+css3,各种炫酷的轮播图更是层出不穷,其实它们看着都很炫酷,但实际实现的原理很简单,我们来试着扒一扒看看:

以下我要说的轮播图呢,是这样的:

那具体是怎么实现的呢?

先给你看张图,看似很炫酷的轮播图实际上的这样的:

或者说是这样的:

好了,它跟以往的拖ul或上浮下沉不同,它最大的特点是样式是被保存起来了,再在下一个规定好的时间帧读,只不过这时候不是a来读a,而是a的上一个或下一个咱先称之为b吧来读a的属性,看到这里你会问了,需要哪些属性呢?其实你应该很快就可以看出来,都分别是什么呢?宽高?还有吗?top,left?还有吗?透明度?还有吗?垂直于我们电脑屏幕的z轴?是的,其实也就这些,没其他的了。

不上代码你肯定又觉得我是忽悠你的了,咱来上代码:

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>仿酷狗轮播组件jq版本</title>
    <link rel="stylesheet" href="../css/kugou_lunbo.css">
    <script type="text/javascript" src="../../jquery-3.2.1.min.js"></script>
    <!--<script type="text/javascript" src="../js/kugou_lunbo.js"></script>-->
    <script src="../js/dc_carousel.js" type="text/javascript"></script>
</head>
<body>
<div class="dc_carousel" id="dc_carousel">
    <div class="dc_carousel_img"><!--这个是放图片的-->
        <ul>
            <li class="first">1</li>
            <li class="second">2</li>
            <li class="third">3</li>
            <li>4</li>
            <li>5</li>
            <li>6</li>
            <li>7</li>
            <li>8</li>
            <li class="second_last">9</li>
            <li class="last">10</li>
        </ul>
    </div>
    <div class="dc_carousel_point"><!--这个是图片对应小圆点的-->
        <ul>
            <li class="current_point"></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>
    </div>
    <span class="previous dc_left"></span><!--左右按钮-->
    <span class="next dc_right"></span>
</div>
</body>
</html>

css

html,body,div,ol,ul,li,p,h1,h2,h3,h4,h5,h6,table,dt,dd,span,input{margin:0;padding:0}ul,li{list-style:none}a{text-decoration:none}.dc_left{float:left}.dc_right{float:right}.dc_clear{content:"";display:block;clear:both}.dc_carousel{width:900px;height:400px;margin:100px auto;box-shadow:0 0 5px #333;-webkit-box-shadow:0 0 5px #333;-moz-box-shadow:0 0 5px #333;-o-box-shadow:0 0 5px #333;position:relative}.dc_carousel .dc_carousel_img{width:100%;height:90%;position:relative}.dc_carousel .dc_carousel_img li{position:absolute;font:100px 楷体;background:#333}.dc_carousel .dc_carousel_img .first{width:70%;height:100%;opacity:1;filter:alpha(opacity=100);text-align:center;background:#f00;left:15%;z-index:10}.dc_carousel .dc_carousel_img .second{width:49%;height:70%;opacity:1;filter:alpha(opacity=100);text-align:right;background:#00f;top:15%;left:51%;z-index:9}.dc_carousel .dc_carousel_img .third{width:30%;height:40%;background:#ff0;top:30%;left:100%;z-index:8}.dc_carousel .dc_carousel_img .last{width:49%;height:70%;opacity:1;filter:alpha(opacity=100);background:#00f;top:15%;z-index:9}.dc_carousel .dc_carousel_img .second_last{width:30%;height:40%;background:#ff0;top:30%;left:-30%;z-index:8}.dc_carousel .dc_carousel_point{width:100%;height:auto;z-index:30;text-align:center}.dc_carousel .dc_carousel_point li{width:10px;height:10px;background:#333;border-radius:50% 50% 50% 50%;-webkit-border-radius:50% 50% 50% 50%;-moz-border-radius:50% 50% 50% 50%;display:inline-block;cursor:pointer}.dc_carousel .dc_carousel_point .current_point{background:#3ff}.dc_carousel span{width:40px;height:40px;top:37%;position:absolute;z-index:55;opacity:1;cursor:pointer}.dc_carousel .next{border-right:10px solid #1aa0ff;border-top:10px solid #1aa0ff;transform:rotateZ(45deg);box-sizing:border-box;right:10px}.dc_carousel .previous{border-left:10px solid #1aa0ff;border-top:10px solid #1aa0ff;transform-origin:20px 20px;transform:rotateZ(-45deg);box-sizing:border-box;left:10px}

js

/**
 * Created by Administrator on 2018/5/3 0003.
 */
$(function(){
    var dc_left=$(".previous");
    var dc_right=$(".next");
    var dc_img=$(".dc_carousel_img li");
    var dc_point=$(".dc_carousel_point li");

    var dc_w=[],dc_h=[],dc_t=[],dc_l=[],dc_o=[],dc_z=[];//这里用了不少数组,其实可以存成一个对象,代码看起来会更好看一些。
    function slide(flag){
        //存样式(属性)
        dc_img.each(function(i){
            dc_w[i]=$(this).css("width");
            dc_h[i]=$(this).css("height");
            dc_t[i]=$(this).css("top");
            dc_l[i]=$(this).css("left");
            dc_o[i]=$(this).css("opacity");
            dc_z[i]=$(this).css("zIndex");
        });
        //取样式(属性)
        dc_img.each(function(i){
            if(flag){
                var a=i+1;
                a%=dc_img.length;//有的人应该喜欢写成a>=dc_img.length?a=0:null;吧?嘿嘿,你看哪个简单?只是js毕竟只是一门10天创造出来的语言,对数据类型的定义比较不严谨,
//其实不仅仅取余,异或,同或等等在数据的处理上也有很大的妙用,这里算小试牛刀了。
} else{ var a=i-1; a<0?a=dc_img.length-1:a; } $(this).css("zIndex",dc_z[a]).animate({ width:dc_w[a], height:dc_h[a], left:dc_l[a], top:dc_t[a], opacity:dc_o[a] },400); }) } var time=setInterval(function(){ slide(1); },2000); });

当然啦,这个只是初级版,为什么这么说呢?你说没按钮功能啊?为啥要按钮功能呢?按钮功能没必要,对你理解原理上的东西没帮助,这种读写样式的方式,配合动画不仅仅做轮播,canvas那些也有很强大的应用的,我们理解它的原理了,很多东西也跟着通了,不希望的是过来黏贴下代码,有个demo出来交差但实际上一知半解,这样就没意思了。

 总结一下吧:这个轮播呢?可以大致分成几部分来完成:

第一步:遍历我们放图片那一组元素(可以是li,也可以是其他),把我们要的那些属性(上面那个)给取下来。这之前呢,我们是先要通过css把相应的样式设置好,这样以便于后面获取。

第二步:取到的元素放在定义好的数组内(对象也行,类似json那样),再把每个数组里的属性赋回去(记住赋回去之后,又像之前读取一样,再把所有的值读下来,this是个好东西呵呵,你不用再去复杂的设置指针,这两步是最关键的),但这时候就不是a赋给a了,赋给b或者c,相信这个选择器的知识我就不说了吧?不懂也可以看上面代码。

第三步:开一个定时器,其实开不开没所谓,我只是需要一个触发条件,就是什么时候你要把数组的值赋回去?你不说或者不定义,程序不知道啊,所以仅仅算是一个触发条件,你也可以用个点击事件也行。

第四步:这个第4步可有可无,只不过由于开头是说的3d动画轮播,这里不说下动画有点说不过去,用jq的animate是比较方便快捷的,当然有个不好的地方是animate动画变动的那一段时间你是做不了啥事的(会有显示bug的,当然也有解决办法,只不过目前想到的这个解决办法不太满意,没有从根本上解决delay这个东西,js是异步的,定时器那些也不会有这个同步的东西在阻塞你,不用去管,只需明白上面的原理即可,扯远了...)。

希望各位有所收获!

 

转载于:https://www.cnblogs.com/dorseych/p/8988623.html

好的,让我们一步步来制作一个类似酷狗音乐安装界面的nsis脚本。 步骤一:准备工作 首先,您需要下载并安装NSIS软件,它是一个用于创建Windows安装程序的开源工具。安装完成后,您需要打开NSIS Script Editor(NSIS脚本编辑器)。 步骤二:创建一个基本的NSIS脚本 在NSIS Script Editor中,您可以创建一个新的NSIS脚本。这里我们创建一个基本的NSIS脚本,包含了必要的元素,如: ``` ;-------------------------------- ;基本信息 Name "My Application" OutFile "MyApplication.exe" InstallDir "$PROGRAMFILES\MyApplication" ;-------------------------------- ;页面设置 Page directory "MyApplication" Page instfiles ;-------------------------------- ;安装过程 Section SetOutPath "$INSTDIR" File "MyApplication.exe" SectionEnd ``` 这个脚本包含了一些基本信息和页面设置,以及一个Section,用于定义安装过程。在页面设置中,我们使用了Page命令来定义安装界面的目录和安装进度条等。 步骤三:制作安装界面 现在,我们需要添加几个自定义页面,以创建一个类似酷狗音乐安装界面的NSIS脚本。在这些页面中,我们将包含一些图像、文本和按钮等元素。 ``` !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "header.bmp" !define MUI_WELCOMEFINISHPAGE_BITMAP "welcome.bmp" ;-------------------------------- ;页面设置 !insertmacro MUI_PAGE_WELCOME !define MUI_PAGE_CUSTOMFUNCTION_PRE PreLicense !insertmacro MUI_PAGE_LICENSE "license.txt" !define MUI_PAGE_CUSTOMFUNCTION_LEAVE LeaveLicense !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH ``` 上面的代码定义了一些宏和页面设置,使用了InsertMacro命令来添加页面。我们可以通过修改这些页面的布局和元素,来创建一个自定义的安装界面。 步骤四:添加安装脚本 现在,我们需要添加一些安装脚本,以实现安装过程中的一些操作。例如,我们可以添加一个自定义的安装路径选择器,让用户选择安装路径。我们还可以添加一些自定义的操作,如创建快捷方式、添加环境变量等。 ``` ;-------------------------------- ;自定义页面 Function PreLicense MessageBox MB_OK "Welcome to My Application Installation Wizard!" FunctionEnd Function LeaveLicense StrCpy $INSTDIR $PROGRAMFILES\MyApplication FunctionEnd Function .onInit !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd Function .onInstSuccess CreateShortCut "$DESKTOP\My Application.lnk" "$INSTDIR\MyApplication.exe" FunctionEnd ``` 上面的代码定义了一些自定义函数,用于在安装过程中执行一些操作,例如显示欢迎消息、选择安装路径、添加快捷方式等。 步骤五:编译和测试 最后,我们需要编译NSIS脚本,生成一个可执行文件,并测试安装过程。您可以在NSIS Script Editor中使用“Compile NSIS Script”命令来编译脚本,然后运行生成的可执行文件进行测试。 以上就是制作一个类似酷狗音乐安装界面的NSIS脚本的基本步骤,您可以根据自己的需要和喜好进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值