原生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>
复制代码

相关文章
|
18天前
|
JSON JavaScript 前端开发
JavaScript原生代码处理JSON的一些高频次方法合集
JavaScript原生代码处理JSON的一些高频次方法合集
|
2月前
|
JavaScript 前端开发 安全
使用 Node.js 插件给指定目录下的所有图片添加上文字水印
使用 Node.js 插件给指定目录下的所有图片添加上文字水印
58 0
|
2月前
|
JavaScript
原生js实现复选框(全选/全不选/反选)效果【含完整代码】
原生js实现复选框(全选/全不选/反选)效果【含完整代码】
58 1
|
18天前
|
JavaScript 算法
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
原生JS完成“一对一、一对多”矩形DIV碰撞检测、碰撞检查,通过计算接触面积(重叠覆盖面积)大小来判断接触对象DOM
|
3月前
|
前端开发 JavaScript 索引
|
3月前
|
移动开发 JavaScript 定位技术
分享118个JS图片代码,总有一款适合您
分享118个JS图片代码,总有一款适合您
22 0
|
3月前
|
移动开发 JavaScript 前端开发
分享126个JS图片代码,总有一款适合您
分享126个JS图片代码,总有一款适合您
35 0
|
3月前
|
移动开发 JavaScript HTML5
分享106个JS图片代码,总有一款适合您
分享106个JS图片代码,总有一款适合您
18 0
|
1月前
|
JavaScript 前端开发 API
js截取图片地址后面的参数和在路径中截取文件名或后缀名
在处理网页上的图片资源或者其他类型的文件资源时,你可能会遇到需要使用这些技巧的情况。以下是一些具体的使用场景:
19 0
|
1天前
|
JavaScript 前端开发 BI
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
原生html—摆脱ps、excel 在线绘制财务表格加水印(html绘制表格js加水印)
6 1