Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第三节)

【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第三节)

作者头像
剽悍一小兔
发布于 2018-05-17 06:47:51
发布于 2018-05-17 06:47:51
1.4K00
代码可运行
举报
运行总次数:0
代码可运行

3.6.6 轮播图的基本实现

上一节中,轮播图已经做了一大半,我今天上午抽空把剩下的代码写完了。现在就大概说一下思路吧。 实现上一张和下一张的效果,基本上就是改变ul的margin-left值。为了保证无缝滚动,我们需要在5张图片的首部和尾部各加一张图片。像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<ul>
    <li class='fl'>
        <a href="javascript:void(0)">
             <img src="5.jpg "/>
        </a>
    </li>
    <li class='fl'>
        <a href="javascript:void(0)">
             <img src="1.jpg "/>
        </a>
    </li>
    <li class='fl'>
        <a href="javascript:void(0)">
             <img src="2.jpg "/>
        </a>
    </li>
    <li class='fl'>
        <a href="javascript:void(0)">
             <img src="3.jpg "/>
        </a>
    </li>
    <li class='fl'>
        <a href="javascript:void(0)">
             <img src="4.jpg "/>
        </a>
    </li>
    <li class='fl'>
        <a href="javascript:void(0)">
             <img src="5.jpg "/>
        </a>
    </li>
    <li class='fl'>
        <a href="javascript:void(0)">
             <img src="1.jpg "/>
        </a>
    </li>
</ul>

接下来,编写移动图片的方法,为了控制下一张和上一张,我们定义一个索引变量index就可以啦。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var index = 0;

获取图片的宽度的数量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var imgwidth = $('.banner .content ul li').width(); //获取轮播图片的宽度
var len =  $('.banner .content ul li').length - 2//获取总共的图片数量

移动图片的方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function movePicture(){
    $('.banner .content ul').animate({'margin-left':-imgwidth * (index+1)},1000,function(){
        if(index == len){
            $(this).css('masrgin-left',-imgwidth);
            index = 0;
        }
        if(index == -1){
            $(this).css('margin-left',-imgwidth * len);
            index = len - 1;
        }
    });
}

最后,给按钮绑定事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rightBtn.on('click',function(){
    index ++;
    movePicture();
});

leftBtn.on('click',function(){
    index --;
    movePicture();
});

3.6.7 按钮的节流控制

接下来要做一个简单的前台节流,意思就是说,如果有用户闲得无聊,在那拼命的点击下一张的按钮,那么每一次点击都会触发movePicture函数,这个时候,你就会看到图片在那乱跳。

所以,为了避免这种用户的操作,我们需要用js来做一个节流,额,好像是叫节流。我记不太清了。意思就是说,比如你在一秒钟内连续点击了8次,那么我就认为这8次中只有1次是有效的,其他的点击都是误操作。

这样的话,无论你怎么狂点鼠标,我都只调用一次movePicture函数。

首先,我们定义一个空的定时器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var timer = null; 

思路为: 每当我触发按钮的点击事件,就把当前的定时器timer清零,然后又马上给他设置定时内容,比如500毫秒后才进行移动操作。也就是说,如果你狂点鼠标,那么定时器就会被马上清零,然后进入定时器的等待状态。必须要等你满了500毫秒,才进行下面的操作。

原理就是这么简单,这个方式也经常用于登陆按钮上。比如,当你网速很慢的时候,点击登陆,网页没有立即给你跳转页面。有些用户闲着无聊,就在那狂点鼠标,不知道你有没有这么做过呢?

如果没有做好节流,那么就会有大量的请求传递到服务器,会给服务器造成很大的压力。

差不多就是这个意思,上代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rightBtn.on('click',function(){
    clearTimeout(timer); //定时器清零
    timer = setTimeout(function(){
        index ++;
        movePicture();
    },500);
    
});

leftBtn.on('click',function(){
    clearTimeout(timer); //定时器清零
    timer = setTimeout(function(){
        index --;
        movePicture();
    },500);
});

不论我鼠标怎么狂点,它每次都只移动一张图片。

好了,轮播图差不多就聊到这里吧,你可以自己去慢慢完善,时间关系我就不扩展太多了。剩下的就交给你自己去玩耍了,比如,我能不能做一个定时轮播呢,每个5秒钟就自动切换到下一张。

我就不写了。

3.6.8 整合资源文件

现在,我们把这个已经做好的banner区域搬到项目里。

在WebContent目录下新增一个static文件夹,这里存放各种静态资源文件。

比如img,js,css等

因为刚才的页面中用到了百度资源库里的jQuery文件:

http://libs.baidu.com/jquery/2.0.0/jquery.min.js

现在我们直接将这个url用浏览器打开。

全部复制。

然后在js文件夹中新建一个jQuery.js文件。

现在,将刚才复制的内容原封不动地拷贝进去。

ctrl + s 保存。

OK,jQuery文件已经有了,接下来,我们将素材图片拷贝到img文件夹中。这样,资源文件就全部准备好了。

3.6.7 引用资源文件

在整合好资源文件后,如何将这些资源文件导入我们的index.jsp呢?这是一个问题。

我们将html代码和css样式拷贝到index.jsp中,看看效果。

图片都没有显示出来。

那么,如何改变img的src,使他能够成功引到/Article/WebContent/static/img 里面的图片呢?

我提供一种比较方便的办法,就是在jsp页面中写Java代码,让Java来获取项目的根路径,然后通过绝对路径的方式引入资源文件。

我们在jsp页面的开头加上以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%
    String path = request.getContextPath();
    int port = request.getServerPort();
    String basePath  = null;
    if(port==80){
        basePath = request.getScheme()+"://"+request.getServerName()+path;
    }else{
        basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
    }
    request.setAttribute("basePath", basePath);
%>

request就是所谓的JSP九大隐式对象中的一员,其实JSP就是Servlet,你可能学过Servlet,那么应该很清楚request是什么意思。以后我会单独来讲解一下关于JSP的东西,现在先继续往下说吧。

request.setAttribute("basePath", basePath) 表示将得到的basePath(项目根路径)存放到request作用域中,你可以把request看做一个HashMap,或者一个JSON对象,都可以。

反正,这句话一写,就说明request作用域中已经有了basePath,我们在JSP页面的其他地方就可以获取到了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="banner">
    <div class='content'>
        <ul>
            <li class='fl'>
                <a href="javascript:void(0)">
                    <img src="${basePath}/static/img/5.jpg "/>
                </a>
            </li>
            <li class='fl'>
                <a href="javascript:void(0)">
                    <img src="${basePath}/static/img/1.jpg "/>
                </a>
            </li>
            <li class='fl'>
                <a href="javascript:void(0)">
                    <img src="${basePath}/static/img/2.jpg "/>
                </a>
            </li>
            <li class='fl'>
                <a href="javascript:void(0)">
                    <img src="${basePath}/static/img/3.jpg "/>
                </a>
            </li>
            <li class='fl'>
                <a href="javascript:void(0)">
                    <img src="${basePath}/static/img/4.jpg "/>
                </a>
            </li>
            <li class='fl'>
                <a href="javascript:void(0)">
                    <img src="${basePath}/static/img/5.jpg "/>
                </a>
            </li>
            <li class='fl'>
                <a href="javascript:void(0)">
                    <img src="${basePath}/static/img/1.jpg "/>
                </a>
            </li>
        </ul>
        
        <span class='banner_left'><i class='btn_left'></i></span>
        <span class='banner_right'><i class='btn_right'></i></span>
</div>

这样就能访问到了。

刚才还忘了一样东西,就是左右按钮的图片,也把它拷贝进来。

引入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.btn_left ,.btn_right{
    display: inline-block;
    width: 21px;
    height: 150px;
    background: url(${basePath}/static/img/banner_tb.png) no-repeat;
    position: absolute;
    left: -38px;
    top: 90px;
    opacity: 0;
    transition: all ease 0.6s;
    cursor: pointer;
}

顺便把banner图往上一点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.banner {
    height: 400px;
    margin-top: 2px;
    overflow: hidden;
}

把js代码也全部拷贝过来吧。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var leftBtn = $('.btn_left').eq(0); //左按钮
var rightBtn = $('.btn_right').eq(0);//右按钮

var ul = $('.banner .content ul').eq(0); 

var index = 0;
var timer = null; 

var imgwidth = $('.banner .content ul li').width(); //获取轮播图片的宽度
var len =  $('.banner .content ul li').length - 2//获取总共的图片数量

rightBtn.on('click',function(){
    clearTimeout(timer); //定时器清零
    timer = setTimeout(function(){
        index ++;
        movePicture();
    },500);
    
});

leftBtn.on('click',function(){
    clearTimeout(timer); //定时器清零
    timer = setTimeout(function(){
        index --;
        movePicture();
    },500);
});
        

function movePicture(){
    
    $('.banner .content ul').animate({'margin-left':-imgwidth * (index+1)},1000,function(){
        if(index == len){
            $(this).css('masrgin-left',-imgwidth);
            index = 0;
        }
        if(index == -1){
            $(this).css('margin-left',-imgwidth * len);
            index = len - 1;
        }
    });
}

发现一个小BUG,当我一直点击下一张,移动到最后一张图片的时候(也就是第一张图片,因为我们在末尾加上了第一张图片),第二张图片(有的苹果那张)没有自动衔接上去。

这是咋回事呢?

有BUG不要怕,去找原因就行了。

经过检查,我发现了一个单词的拼写错误:

原来是margin-left写错了。

OK,更正后就正确了,我顺便把demo页面也改好了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function movePicture(){
    
    $('.banner .content ul').animate({'margin-left':-imgwidth * (index+1)},1000,function(){
        if(index == len){
            $(this).css('margin-left',-imgwidth);
            index = 0;
        }
        if(index == -1){
            $(this).css('margin-left',-imgwidth * len);
            index = len - 1;
        }
    });
}

改正就行了,额,小细节不要在意。。。

banner图这样就差不多了,下一节开始做登陆功能。我先把页面画好,以后页面的绘制我就不介绍得这么详细了,重点还是以Java为主。

我要下载源码

免责声明: 博客中所有的图片素材均来自百度搜索,仅供学习交流,如有问题请联系我,侵立删,谢谢。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016.09.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第二节)
312334546574820.jpg 昨天给这个系列开了一个头,那么,今天继续吧。 3.4 登陆和注册按钮 导航栏已经做好了,那么一般来说,在标题栏的最右边就是登陆和注册按钮。 <div class='login'> <span><a href="javascript:void(0)">登陆</a></span> <span>|</span> <span><a href="javascript:void(0)">注册</a></span> </div> css样式: .hea
剽悍一小兔
2018/05/17
1.7K0
【精编重制版】JavaWeb 入门级项目实战 -- 文章发布系统 (第二节)说明
本教程是,原文章发布系统教程的精编重制版,会包含每一节的源码,以及修正之前的一些错误。因为之前的教程只做到了评论模块,很多地方还不完美,因此重制版会修复之前的一些谬误和阐述不清的地方,而且,后期我会考虑完成该项目的后台管理。希望本教程提供的内容,可以成为JavaWeb初学者一套较为完整的练手项目。
剽悍一小兔
2018/12/12
1.6K0
轮播
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> *{ padding: 0; margin: 0; } .banner{ overflow: hidden; width: 1000px; hei
河湾欢儿
2018/09/06
8370
【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第四节)
首先,更正一下上一章中的一个小错误,就是在index.jsp中,banner部分没有添加结束的标签,加上去就OK了,我也是完善页面的时候发现的。 另外,index.jsp中引入的jQuery也需要换成本地的。 <script src="${basePath}/static/js/jQuery.js"></script> 今天我把页面重构了一下,添加了内容区和底栏(footer),我会把目前的代码上传的,有需要的自己去看就行了,我们就不在前台页面花费太多的时间了。div + css,布局等等,这些东西以后有时
剽悍一小兔
2018/05/17
1.1K0
jquery动画效果实例_动画js
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/03
10.8K0
jquery动画效果实例_动画js
【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第七节)
01 国庆长假终于结束了,博主想到以往这个时候,自己就已经回到学校,和一群基友扯扯犊子,顺便吹吹牛,好不快活,可惜这种生活不会再有了。虽说如此,但是参加了工作以后,毕竟有更多的时间去做自己想做的事情,没有了学校里的那么多约束,也不再需要为了考试忙活个半天,想来也是不错的。 好的,再次回到这个系列。 不知不觉,我发现自己在简书已经写了好几万字了。当我无聊的时候,就会去看看自己之前写的文章,然后感到很奇怪,似乎那些东西根本不是自己写的一样。我仿佛是在看别人的文章,好长时间我都有这种感受。 这真的是挺奇怪的,不过
剽悍一小兔
2018/05/17
9930
WEB前端期末实训大作业---我的家乡
该网页从宣传自己的家乡出发,设计到家乡的旅游观光,生态环保,现代农业,人文精神,总共设计了五个页面,主要使用的布局房市flex布局,运用最基本的HTML内容。
用户10950404
2024/07/30
2600
WEB前端期末实训大作业---我的家乡
原生js实现简单移动端轮播图
最近项目不是很忙,自己就用原生js写了一个简单的移动端轮播图的小demo,可实现自动轮播和手势滑动轮播,然后就把它记录到个人博客里。还有很多不足的地方,希望多多指出,以便改进。 1、代码部分 分为四个文件:   slideshow.html   slideshow.css   base.js   slideshow.js 1.1、slideshow.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <me
用户1174387
2018/01/17
22.1K0
原生js实现简单移动端轮播图
【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第一节)
312334546574820.jpg 序 前一段时间有很多朋友来问我各种问题,比如java怎么学,c,c++,c#,java,还有php等等,到底学哪个好,哪个好就业?其中不乏刚毕业找不到工作的学生,我对此也是很有感触,回想当初那最最艰难的日子,我的确很了解这种焦急的心态。其实我个人感觉,编程语言都大同小异,无非是语法变一变,当然,如果你为了快速上手,我还是优先推荐java。 最近琢磨着要写点东西,把基本的Java Web开发流程完整地走一遍,最后决定,干脆就写一个小小的项目实战吧。这个小项目作为一个Ja
剽悍一小兔
2018/05/17
1.2K0
jQuery之制作简单的轮播图效果
        通过修改每一张图片的透明度,让其每隔一段时间将其中的某一张图片透明度设为 1,而其他的设为0,从而实现图频轮流播放的效果。首先让一组图片绝对定位,并使其重叠,通过函数切换控制图片的透明度和定时器来触发该函数,改变不同图片的透明度。
思索
2024/08/16
7370
jQuery实现轮播
一、轮播的实现原理 1.轮播是把需要轮播的图片浮动水平排列成一排。 2.然后设置一个视窗,大小等于一张图片。 3.视窗的overflow设置为hidden,溢出部分不可见。 4.点击下一页,所有图片就水平移动一个宽度。 5.如果要实现左右滚动无限循环的效果,就需要在图片列表开头和结尾分别添加最后一张图和第一张图 就像一张胶卷,每次展示一张图片,通过移动胶卷来切换可视的图片。 二、使用jquery实现图片自动轮播效果 <!DOCTYPE html> <html lang="en"> <h
小胖
2018/06/27
10.2K0
移动端轮播图笔记
移动端浏览器兼容性好,我们不需要考虑以前JS的兼容问题,可以放心使用原生JS书写效果,但是移动端也有自己独特的地方,比如触屏事件touch(也叫触摸事件),Android和IOS都有。
帅的一麻皮
2020/05/07
2.8K0
三种方式实现轮播图功能
使用position的绝对定位与相对定位实现轮播图,首先将图片全部拼接成为一行,使用overflow: hidden;将其他图片隐藏,将这一行图片加入定时任务不断进行左移,从而只显示中间的图片,对于边缘特殊处理,将第一张轮播图追加到一行图片之后,当切换到最后一张轮播图时,下一张即播放第一张图,当此图轮播完成后,将所有图片归位,提供两个DEMO,第一个是单纯的轮播不存在任何控制按钮,第二个则比较完善。
WindRunnerMax
2020/08/27
2.2K0
jq实现图像旋转木马:轮焦点+关于控制+自己主动旋转木马
打包下载:http://download.csdn.net/detail/u011043843/7994017
全栈程序员站长
2022/07/05
3.9K0
【JavaScript小项目】弹出广告
思路分析 4秒钟之后显示广告,广告显示2秒钟,之后隐藏。 循环往复3次,广告永远消失。 setInterval(function, timeout ms):每隔多长时间执行一次函数,该定时器会重复执行。 clearInterval():取消定时器,需要传入定时器对象。 setTimeout(function, timeout ms):在指定延时时间后调用函数,该定时器只执行一次。 clearTimeout(): 取消定时器,需要传入定时器对象。 代码实现 <!DOCTYPE html> <html>
efonfighting
2020/02/13
1K0
【JavaScript小项目】弹出广告
从零开始学 Web 之 移动Web(二)JD移动端网页,移动触屏事件
要实现轮播图,必须在首尾添加图片,如果直接在 html 代码直接添加图片的话,由于图片的数量是不固定的,那么每次图片的数量发生改变的话,不仅需要设置 html 的源码,而且还要设置对应的 css 代码,所以,为了从后台获取的图片数量不固定的情况下,也能够实现轮播效果,我们可以使用 js 来动态的添加图片。
Daotin
2018/08/31
2.9K0
从零开始学 Web 之 移动Web(二)JD移动端网页,移动触屏事件
自己实现PC端jQuery版轮播图
最近其他项目不是很忙,被安排给公司的官网项目做一个新的页面(之前没接触公司官网项目),其中有一个用到轮播图的地方,最开始想直接用swiper.js插件实现就好了,可是发现官网项目里之前都没有引入过swiper.js,后来想了想,就不引入它了,免得又得增加依次一次网络请求,项目里既然已经用到了jQuery,那就索性用jQuery写一个轮播图吧。
用户1187932
2018/03/09
11.7K1
自己实现PC端jQuery版轮播图
JavaScript案例:轮播图
节流阀目的:当上一个函数动画内容执行完毕,再去执行下一个函数动画,让事件无法连续触发。
岳泽以
2022/10/26
3.4K0
JavaScript案例:轮播图
自实现PC端jQuery版轮播图
  最近其他项目不是很忙,被安排给公司的官网项目做一个新的页面(之前没接触公司官网项目),其中有一个用到轮播图的地方,最开始想直接用swiper.js插件实现就好了,可是发现官网项目里之前都没有引入过swiper.js,后来想了想,就不引入它了,免得又得增加依次一次网络请求,项目里既然已经用到了jQuery,那就索性用jQuery写一个轮播图吧。 现在把自己写的轮播图这块代码单独拿出来,做一个小demo写在这里记录一下(demo中轮播图的图片网上随意找的) 实现的效果:     1、自动轮播(轮播时间间
用户1174387
2018/03/28
6.1K0
自实现PC端jQuery版轮播图
JavaWeb项目(登录注册页面)全过程详细总结
③ 项目开发工具 :Eclipse(Java EE IDE) java运行环境是:jdk 15
全栈程序员站长
2022/09/09
6.3K1
JavaWeb项目(登录注册页面)全过程详细总结
推荐阅读
相关推荐
【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (第二节)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验