基于javascript实现图片滑动效果

今天看了别人写的图片滑动,看起来很酷,读源码时,似乎有些困难,就模仿着写了一个,实现的效果与原网页相同,不过自己的js代码,逻辑简单,有待改进。
ps:前两天写了旋转木马,那个兼容性不好,今天写这个网页的时候,也是按照这个思路,在谷歌浏览器上运行很好,火狐很多功能不能实现,由于wrap——panel使用了绝对定位,就将translate平移改为了left。改动后,各个浏览器运行的效果不错。

具体代码如下

html代码(没写注释)

<div class="container">
    <h1>Parallax Slider</h1>
    <div class="wrap">
      <div class="bg-img">
        <div id="bg_1" class="bg bg-1" style="left: 0px;"></div>
        <div id="bg_2" class="bg bg-2" style="left: 0px;"></div>
        <div id="bg_3" class="bg bg-3" style="left: 0px;"></div>
      </div>
      <div id="wrap_panel" class="wrap-panel" style="left: 0px;">
        <div class="panel panel-1">
          <img id="img_1" src="images/1.jpg">
        </div>
        <div class="panel panel-2">
          <img src="images/2.jpg">
        </div>
        <div class="panel panel-3">
          <img src="images/3.jpg">
        </div>
        <div class="panel panel-4">
          <img src="images/4.jpg">
        </div>
        <div class="panel panel-5">
          <img src="images/5.jpg">
        </div>
        <div class="panel panel-6">
          <img src="images/6.jpg">
        </div>
      </div>
      <div class="navigation-button">
        <span id="perv_btn" class="perv-button"></span>
        <span id="next_btn" class="next-button"></span>
      </div>
      <div id="show_small" class="show-small">
        <ul>
          <li><img src="images/thumbs/1.jpg"></li>
          <li><img src="images/thumbs/2.jpg"></li>
          <li><img src="images/thumbs/3.jpg"></li>
          <li><img src="images/thumbs/4.jpg"></li>
          <li><img src="images/thumbs/5.jpg"></li>
          <li><img src="images/thumbs/6.jpg"></li>
        </ul>
      </div>
    </div>
  </div> 

css代码(自己对应着看):

* { margin: 0; padding: 0; }
  html, body, .container { width: 100%; height: 100%; font-family: 'Microsoft Yahei'; }
  .container { background-color: #222; overflow-x: hidden; }
  .container h1 { font-size: 50px; color: #ccc; text-align: center; font-weight: bolder; height: 120px; line-height: 120px; }
  .wrap { position: relative; width: 600%; height: 400px; border-top: 10px solid #333; border-bottom: 10px solid #333; margin-top: 20px; }
  .bg { position: absolute; width: 100%; height: 100%; left: 0; top: 0; -webkit-transition: all 1s;-moz-transition: all 1s;-ms-transition: all 1s;-o-transition: all 1s;transition: all 1s; }
  .bg-1 { background: url(images/bg1.png); }
  .bg-2 { background: url(images/bg2.png); }
  .bg-3 { background: url(images/bg3.png); }
  .wrap-panel { position: absolute; width: 100%; height: 100%; -webkit-transition: all 1s; -moz-transition: all 1s; -ms-transition: all 1s; -o-transition: all 1s; transition: all 1s; }
  .panel { width: 16.66%; height: 100%; float: left; }
  .panel img { display: block; margin: 0 auto; margin-top: 35px; border-radius: 10px; border: 10px solid rgba(143, 143, 143, 0.6); }
  .navigation-button span:hover { opacity: 0.8 }
  .perv-button, .next-button { position: absolute; width: 30px; height: 60px; background-color: #344133; border-radius: 10px; cursor: pointer; opacity: 0.4; }
  .perv-button { background: #000 url(images/prev.png) center center no-repeat; }
  .next-button { background: #000 url(images/next.png) center center no-repeat; }
  .show-small { position: absolute; width: 680px; bottom: 20px; }
  .show-small ul { list-style: none; }
  .show-small ul li { float: left; margin: 0 10px; border: 5px solid #fff; opacity: 0.7; cursor: pointer;-webkit-transition: all .3s; -moz-transition: all .3s; -ms-transition: all .3s;-o-transition: all .3s; transition: all .3s; }
  .show-small ul li:hover { margin-top: -15px; }

js代码(小demo):

window.onload = function() {
      // 得到元素
      var getDOM = function (id){
        return typeof id==="string"?document.getElementById(id):id;
      } 

      // 得到对象
      var img = getDOM('img_1');
      var prev = getDOM("perv_btn");
      var next = getDOM("next_btn");
      var wrap_panel = getDOM('wrap_panel');
      var bg_1 = getDOM("bg_1");
      var bg_2 = getDOM("bg_2");
      var bg_3 = getDOM("bg_3");
      var show_small = getDOM("show_small");
      var list = show_small.getElementsByTagName("li");
      var wwidth; 

       // 为元素绑定事件
      var addEvent = function(id,event,fn) {
       var el = getDOM(id) || document;
       if(el.addEventListener){
        el.addEventListener(event,fn,false);
       }else if(el.attachEvent){
        el.attachEvent('on' + event,fn);
       }
      }
      function init() { 

        // 对按钮进行定位
        // 向前按钮的左边距离=图片的左距离+边框
        prev.style.left = img.offsetLeft + 10 + 'px';
        // 向前按钮的上边距离=图片的上距离+图片高度的一半-按钮高度的一半
        prev.style.top = img.offsetTop + img.clientHeight/2 - prev.clientHeight/2 + 'px';
        next.style.left = img.offsetLeft + img.clientWidth + 10 - next.clientWidth + 'px';
        next.style.top =prev.style.top; 

        // 对小图片的容器进行定位
        wwidth = document.documentElement.clientWidth || document.body.clientWidth;
        show_small.style.left = (wwidth - show_small.clientWidth)/2 + 'px';
      } 

      // 小图片的处理
      function small_img() {
        // 对图片进行旋转处理
        for (var i = 0;i< list.length; i++) {
          // 旋转方向
          var direction = Math.pow(-1,parseInt(Math.random()*10));
          list[i].style = "transform:rotate(" + (Math.random()*20*direction) + "deg)";
        }
        list[0].style.opacity = 1;
      } 

      function only_one(el,num) {
        for (var i = 0; i < el.length; i++) {
          el[i].style.opacity = 0.7;
        }
        // console.log(num);
        el[num].style.opacity = 1;
      } 

      // 浏览器缩放时
      window.onresize = function() {
        init();
      } 

      // 执行函数
      init();
      small_img();
      addEvent(prev,'click',function() {
        // 改变wrap-panel的left
        var oldPos = parseInt(wrap_panel.style.left); 

        if(oldPos == 0) {   

          // 背景平移 图片容器平移
          bg_1.style.left=bg_2.style.left=bg_3.style.left=wrap_panel.style.left = -wwidth*(list.length-1) +'px'; 

          // 更改对应小图片透明度
          only_one(list,list.length-1);
        } else { 

          // 背景平移 图片容器平移
          wrap_panel.style.left = (oldPos + wwidth) +'px';
          bg_1.style.left= (oldPos + wwidth - parseInt(-(oldPos/wwidth + 1))*100) +'px';
          bg_2.style.left= (oldPos + wwidth - parseInt(-(oldPos/wwidth + 1))*300) +'px';
          bg_3.style.left= (oldPos + wwidth - parseInt(-(oldPos/wwidth + 1))*500) +'px'; 

          // 更改对应小图片透明度
          only_one(list,parseInt(-(oldPos/wwidth + 1)));
        }
      });
      addEvent(next,'click',function() {
        // 改变wrap-panel的left
        var oldPos = parseInt(wrap_panel.style.left);         

        if(oldPos == -wwidth*(list.length-1)) {    

          // 背景平移 图片容器平移
          bg_1.style.left=bg_2.style.left=bg_3.style.left=wrap_panel.style.left = '0px'; 

          // 更改对应小图片透明度
          only_one(list,0);
        } else {
          // 背景平移 图片容器平移
          wrap_panel.style.left = (oldPos - wwidth) +'px';
          bg_1.style.left= (oldPos - wwidth + parseInt(-(oldPos/wwidth + 1))*100) +'px';
          bg_2.style.left= (oldPos - wwidth + parseInt(-(oldPos/wwidth + 1))*300) +'px';
          bg_3.style.left= (oldPos - wwidth + parseInt(-(oldPos/wwidth + 1))*500) +'px'; 

          // 更改对应小图片透明度
          only_one(list,parseInt(-(oldPos/wwidth - 1)));
        }
      });
    }

以上就是本文的全部内容,希望对大家学习javascript程序设计有所帮助。

(0)

相关推荐

  • js实现支持手机滑动切换的轮播图片效果实例

    本文实例讲述了js实现支持手机滑动切换的轮播图片效果的方法.分享给大家供大家参考.具体如下: 运行效果如下: 完整实例代码点击此处本站下载. 使用方法案例: <script type="text/javascript" src="../src/zepto.js"></script> <script type="text/javascript" src="../src/carousel-image.js&qu

  • 使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)

    PC 移动端兼容  IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+ 惯性助动,滑动回弹 门面模式 复制代码 代码如下: window.onload = function() { /*测试数据*/ var insert = ''; for (var i = 0; i < 80; i++) {  insert += '<div style = "width:100%; text-align:center;">滑动测试 ' + i + '

  • JS实现的适合做faq或menu滑动效果示例

    本文实例讲述了JS实现的适合做faq或menu滑动效果.分享给大家供大家参考,具体如下: <!CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dt--> <meta http-equiv="Content-Type" content="text/html;

  • js通过更改按钮的显示样式实现按钮的滑动效果

    通过更改按钮的显示样式,来实现按钮动态滑动 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> &

  • js实现分享到随页面滚动而滑动效果的方法

    本文实例讲述了js实现分享到随页面滚动而滑动效果的方法.分享给大家供大家参考.具体如下: 页面向上向下滚动,分享到的模块随着滑动. 要点: 复制代码 代码如下: var scrtop =document.documentElement.scrollTop||document.body.scrollTop; var height = document.documentElement.clientHeight||document.body.clientHeight; var top = scrtop

  • javascript 仿QQ滑动菜单效果代码

    [程序源码] 复制代码 代码如下: var QQ = function() { // 公用函数 function T$(id) { return document.getElementById(id); } function T$$(root, tag) { return (root || document).getElementsByTagName(tag); } function $extend(des, src) { for(var p in src) { des[p] = src[p];

  • javascript图片滑动效果实现

    本文为大家分享了javascript图片滑动效果实现方法,具体内容如下,先看一下效果图: 鼠标滑过那张图,显示完整的哪张图,移除则复位: 简单的CSS加JS操作DOM实现: <!doctype html> <html> <head> <meta charset="UTF-8"> <title>sliding doors</title> <link rel="stylesheet" href

  • JS+CSS实现滑动切换tab菜单效果

    本文实例讲述了JS+CSS实现滑动切换tab菜单效果.分享给大家供大家参考.具体如下: 这是风格简单的一款JS+CSS滑动门特效代码,当鼠标滑过菜单的时候,二级菜单自动切换,鼠标不需要点击,滑动门效果是个比较流行的网页菜单效果,在网上经常可看到这种菜单的身影.本菜单在火狐.IE8.Chrome下测试通过,代码兼容性还可以,自己用的化再美化一下风格. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-css-move-cha-tab-menu-

  • 用原生js做个简单的滑动效果的回到顶部

    很多网页在下方都会放置一个"返回顶部"按钮,尤其是页面底部没有导航的网页,这样可以帮助访客重新找到导航或者重温一遍广告(想得真美).随着近几年来 JavaScript 的应用日渐广泛,滑动效果无处不在,于是我也跟跟风,将返回顶部功能做成了滑动效果.后来为了更贴合物理特征, 改造做成了减速的滑动效果. 首先说一下原理吧,我们会获取滚动条到页面顶部的距离,然后上移一定的距离:再获取滚动条到页面顶部的距离,上移一定的距离(比上一次小一点);以此类推 ... <script type=&

  • 基于javascript实现图片滑动效果

    今天看了别人写的图片滑动,看起来很酷,读源码时,似乎有些困难,就模仿着写了一个,实现的效果与原网页相同,不过自己的js代码,逻辑简单,有待改进. ps:前两天写了旋转木马,那个兼容性不好,今天写这个网页的时候,也是按照这个思路,在谷歌浏览器上运行很好,火狐很多功能不能实现,由于wrap--panel使用了绝对定位,就将translate平移改为了left.改动后,各个浏览器运行的效果不错. 具体代码如下 html代码(没写注释) <div class="container">

  • 基于JavaScript实现图片剪切效果

    学会如何获取鼠标的坐标位置以及监听鼠标的按下.拖动.松开等动作事件,从而实现拖动鼠标来改变图片大小. 还可以学习css中的clip属性. 一.CSS实现图片不透明及裁剪效果. 图片剪切三层结构 1.第一层opacity,给图层设置透明度 2.第二层clip,clip属性:对图片进行裁剪,实现图像的一部分显示,其他部分进行隐藏 3.第三层选取框absolute(与第二层重叠的),包括八个触点的效果 html代码: <div id="box"> <img src=&quo

  • 基于javascript实现图片切换效果

    本文实例为大家分享了js实现图片切换效果,供大家参考,具体内容如下 用js实现点击按钮,图片切换的效果: <div class="box" id="box"> <div class="img_box" id="img_box"> <img src="../raw/b1.jpg" class="image" > <img src="../

  • JavaScript基于SVG的图片切换效果实例代码

    最近太忙了,自动来到rjxy后,不晓得怎么回事,忙的都没时间更博了. 昨天还有个同学跟我说,你好久没更新博客了.. 甚为惭愧~~ 正好12月来了,今天开一篇. 最近上课讲到了 SVG,不晓得同学们理解到没. -_-!!! 图片轮播见的太多,今天就用 SVG 写了一个图片轮播,效果如下. 效果要求 点击控制块,图片切换.切换的时候使用圆形做遮罩,由小到大变化.每次切换的时候,圆的位置随机产生. 主要知识点 1. SVG 的裁切(遮罩),clip-path 的运用. 2. SVG 利用 JS 更改层

  • 基于JavaScript实现游戏购物车效果详解

    目录 项目展示 登陆界面 注册界面 主界面 项目展示 登陆界面 登陆界面html和js <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <tit

  • 基于JavaScript实现图片裁剪功能

    目录 一.图片文件的上传和读取 二.图片展示和蒙层处理 CSS clip-path 三.裁剪框展示 裁剪框的缩放点 cursor 鼠标样式 四.裁剪框移动事件 五.裁剪框缩放操作 六.完成裁剪功能 drawImage 后记 在前端开发中,当遇到图片或头像上传等功能时,有尺寸分辨率限制的话,就需要用到图片的裁剪功能.想了解图片基础知识的,可见前文图片基础知识介绍. 而canvas的使用,对于我们直接在web端实现图片裁剪功能成为可能.本文将使用前端技术实现一个图片的裁剪功能. 一.图片文件的上传和

  • 基于javascript实现窗口抖动效果

    本文实例讲解了基于javascript实现窗口抖动效果的详细代码,分享给大家供大家参考,具体内容如下 效果图: 鼠标点击,窗口实现抖动. 具体代码: <!DOCTYPE HTML> <html> <head> <meta charset="gb2312"/> <title>窗口登陆效果</title> <style type="text/css"> #win { position:r

  • 基于JavaScript实现图片连播和联级菜单实例代码

    <!DOCTYPE html> <html> <head> <title>图片轮播</title> <style> div{ border: 1px solid red; width:218px; height: 218px; } .show{ display: inline-block; } .hide{ display: none; } </style> <meta charset="UTF-8&quo

  • JavaScript实现图片切换效果

    本文实例为大家分享了JavaScript实现图片切换效果,自定义属性的应用  供大家参考,具体内容如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>图片切换实例</title> <style> body{ background-color: #A9A9A9; margin:0px; } ul{ padding: 0; margi

随机推荐