原生js图片滚动

简介:

在网页中,大图滚动的例子用到可以说非常广泛。以下是学js时,用原生js写的大图滚动的例子,写的例子可能有些简陋,但一般网页中的大致效果是这样的。此例子中,引用了tween算法。

    这时,可能就有童鞋要说了,大图滚动,我用JQ写,用你四分之一的代码就能搞定了,效果还比你的炫。嗯,我想说:好像是这样吧。一方面,我这里只是介绍一种方法,一种学习过程,如果没有扎实的原生js基础,你对JQ的理解肯定也不会很深刻。只有掌握原生的js,才能在工作中解决更多新问题。另一方面,你确定用JQ写的代码真的比原生js的少吗?难道你引用的JQ就不是代码了,相对于咱这个小例子,JQ的代码其实是非常多的。浏览器在执行你的代码前,会先把JQ代码执行一遍。用JQ写的例子会比原生的耗性能、耗时间。如果是简单的效果,我是建议用原生js写,不要一写代码就用JQ,这个习惯不是很好。

    具体步骤就不细说了,大家看代码吧。

复制代码
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>大图滚动</title>
<meta name="Keywords" content="">
<meta name="author" content="@my_programmer">
<style type="text/css">
/*重置{*/
body,td{padding:0;margin:0;}img{border:0;}table{border-collapse:collapse;border-spacing:0;}
/*}重置*/
.outer{width:600px;height:450px;margin:20px auto 0;overflow:hidden;}
img{width:600px;height:450px;float:left;}
.div2{width:600px;height:50px;margin:0 auto;}
span{float:left;width:80px;line-height:50px;text-align:center;font-size:20px;background:#ccc;font-weight:bold;cursor:pointer;}
.abc{background:#f00;}
a{width:100px;float:left;line-height:50px;text-align:center;font-size:20px;background:#999;font-weight:bold;cursor:pointer;}
</style>
</head>
<body>
    <div class="outer" id="outer">
        <table>      <!-- 用table的原因:一是为了可扩展; 二是提高用户体验。-->
            <tr>
                <td>
                    <img src="images/pobaby1.gif" alt="pobaby1"/>
                </td>
                <td>
                    <img src="images/pobaby2.gif" alt="pobaby2"/>
                </td>
                <td>
                    <img src="images/pobaby3.gif" alt="pobaby3"/>
                </td>
                <td>
                    <img src="images/pobaby4.gif" alt="pobaby4"/>
                </td>
                <td>
                    <img src="images/pobaby5.gif" alt="pobaby5"/>
                </td>
            </tr>
        </table>
    </div>
    <div class="div2">
<
a>&lt;&lt;</a><span class="abc">1</span><span>2</span><span>3</span><span>4</span><span>5</span><a>&gt;&gt;</a>
</
div> <script type="text/javascript"> var outer=document.getElementById("outer"); var imgs=document.getElementsByTagName("img"); var spans=document.getElementsByTagName("span"); var as=document.getElementsByTagName("a"); var time,time1,n=0; var Tween = {//Tween算法 Bounce: { easeIn: function(t,b,c,d){ return c - Tween.Bounce.easeOut(d-t, 0, c, d) + b; }, easeOut: function(t,b,c,d){ if ((t/=d) < (1/2.75)) { return c*(7.5625*t*t) + b; } else if (t < (2/2.75)) { return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; } else if (t < (2.5/2.75)) { return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; } else { return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; } }, easeInOut: function(t,b,c,d){ if (t < d/2) return Tween.Bounce.easeIn(t*2, 0, c, d) * .5 + b; else return Tween.Bounce.easeOut(t*2-d, 0, c, d) * .5 + c*.5 + b; } } } time1=setInterval(run1,2000); //计时器time1 function run1(){ //参数的函数 n++; if(n>spans.length-1){ //当图片运动到最后时,返回到第一张 n=0; } run(n*imgs[0].offsetWidth); //传参 } function run(endv){ //设定运动的函数 var t=0;   //初始步数 var b=outer.scrollLeft; //初始值 var c=endv-b;  //变化量 var d=50;  //总步数 function run2(){ outer.scrollLeft=Tween.Bounce.easeOut(t,b,c,d); //引入tween函数 time=setTimeout(run2,30); //每隔30毫秒执行一次run2 t++; if(t>d){ //走d步清除计时器 clearTimeout(time); } }run2(); for(i=0;i<spans.length;i++){ //使所有按钮显示原始颜色 spans[i].className=""; } spans[n].className="abc"; //当前按钮颜色随图片变化 } for(var i=0;i<spans.length;i++){ //获取数字按钮事件 spans[i].onclick=test1; spans[i].onmouseout=test2; } function test1(){ //鼠标点击按钮时的函数 clearInterval(time1); clearTimeout(time); for(var i=0;i<spans.length;i++){ if(spans[i]==this){ //指定当前对象 spans[i].className="abc"; n=i; //把当前位置赋给n }else{ spans[i].className=""; } } run(n*600); } function test2(){ //鼠标离开按钮上的函数 clearInterval(time1); time1=setInterval(run1,2000); } for(var i=0;i<as.length;i++){ //获取左右按钮事件 as[i].onclick=dest1; as[i].onmouseout=dest2; } function dest1(){ if(as[0]==this){ //鼠标点击左按钮时的函数 clearInterval(time1); clearTimeout(time); n--; if(n<0){ n=4; } run(n*600); } if(as[1]==this){ //鼠标点击右按钮时的函数 clearInterval(time1); clearTimeout(time); n++; if(n>4){ n=0; } run(n*600); } } function dest2(){ //鼠标移开时的函数 clearInterval(time1); time1=setInterval(run1,2000); } </script> </body> </html>
复制代码
相关文章
|
3月前
|
前端开发 JavaScript API
使用 JavaScript 实现图片上传
使用 JavaScript 实现图片上传
117 1
|
4天前
|
移动开发 前端开发 JavaScript
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
于辰在大学期间带领团队参考网易游戏官网的部分游戏页面,开发了一系列前端实训作品。项目包括首页、2021校园招聘页面和明日之后游戏页面,涉及多种特效实现,如动态图片切换和人物聚合效果。作品源码已上传至CSDN,视频效果可在CSDN预览。
前端实训,刚入门,我用原生技术(H5、C3、JS、JQ)手写【网易游戏】页面特效
|
2月前
|
移动开发 前端开发 JavaScript
原生JavaScript+canvas实现五子棋游戏_值得一看
本文介绍了如何使用原生JavaScript和HTML5的Canvas API实现五子棋游戏,包括棋盘的绘制、棋子的生成和落子、以及判断胜负的逻辑,提供了详细的代码和注释。
30 0
原生JavaScript+canvas实现五子棋游戏_值得一看
|
3月前
|
JavaScript 数据可视化
JS如何优雅的实现模块自动滚动展示
【8月更文挑战第22天】JS如何优雅的实现模块自动滚动展示
32 1
JS如何优雅的实现模块自动滚动展示
|
2月前
|
JavaScript 前端开发
【原创】用JavaScript动态获取网页中缩放图片的长度、宽度和显示比例
【原创】用JavaScript动态获取网页中缩放图片的长度、宽度和显示比例
|
3月前
|
Devops 持续交付 测试技术
JSF遇上DevOps:开发流程将迎巨变?一篇文章带你领略高效协同的魅力!
【8月更文挑战第31天】本文探讨了如何在JavaServer Faces(JSF)开发中融入DevOps文化,通过持续集成与部署、自动化测试、监控与日志记录及反馈机制,提升软件交付速度与质量。文中详细介绍了使用Jenkins进行自动化部署、JUnit与Selenium进行自动化测试、ELK Stack进行日志监控的具体方法,并强调了持续改进的重要性。
38 0
|
3月前
|
JavaScript 前端开发 API
从零开始学表单操作,jQuery 与原生 JavaScript 完全指南,带你轻松掌握网页交互关键!
【8月更文挑战第31天】在网页开发中,表单是实现用户互动的关键元素。无论是收集信息、提交数据还是验证输入,都需要对表单进行有效操作。本文档介绍了如何使用原生 JavaScript 和 jQuery 操作表单,包括获取表单元素、读写表单值、处理表单提交及验证等核心功能。jQuery 提供了更简洁的语法和更好的兼容性,但原生 JavaScript 在性能上有优势。选择合适的方法取决于项目需求和个人偏好。下面通过具体示例展示了两种方式的操作方法。
32 0
|
3月前
|
JavaScript 前端开发
JS - 如何上传 Base64 编码的图片
本文展示了如何将Base64编码的图片在前端转换为Blob对象,并使用`FormData`上传到服务器端的方法。
180 0
|
3月前
|
JavaScript 前端开发
使用js,html,css实现歌词滚动的效果
使用js,html,css实现歌词滚动的效果
56 0