旋转木马 -- 拖拽的对话框 ---- 高清放大镜 -----自制滚动条

旋转木马:

@charset "UTF-8";
/*初始化  reset*/
blockquote,body,button,dd,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,hr,input,legend,li,ol,p,pre,td,textarea,th,ul{margin:0;padding:0}
body,button,input,select,textarea{font:12px/1.5 "Microsoft YaHei", "微软雅黑", SimSun, "宋体", sans-serif;color: #666;}
ol,ul{list-style:none}
a{text-decoration:none}
fieldset,img{border:0;vertical-align:top;}
a,input,button,select,textarea{outline:none;}
a,button{cursor:pointer;}

.wrap{
    width:1200px;
    margin:100px auto;
}
.slide {
    height:500px;
    position: relative;
}
.slide li{
    position: absolute;
    left:200px;
    top:0;
}
.slide li img{
    width:100%;
}
.arrow{
    opacity: 0;
}
.prev,.next{
    width:76px;
    height:112px;
    position: absolute;
    top:50%;
    margin-top:-56px;
    background: url(../images/prev.png) no-repeat;
    z-index: 99;
}
.next{
    right:0;
    background-image: url(../images/next.png);
}

<div class="wrap" id="wrap">
  <div class="slide" id="slide">
    <ul>
      <li><a href="#"><img src="images/slidepic1.jpg" alt=""/></a></li>
      <li><a href="#"><img src="images/slidepic2.jpg" alt=""/></a></li>
      <li><a href="#"><img src="images/slidepic3.jpg" alt=""/></a></li>
      <li><a href="#"><img src="images/slidepic4.jpg" alt=""/></a></li>
      <li><a href="#"><img src="images/slidepic5.jpg" alt=""/></a></li>
    </ul>
    <div class="arrow" id="arrow">
      <a href="javascript:;" class="prev" id="arrLeft"></a>
      <a href="javascript:;" class="next" id="arrRight"></a>
    </div>
  </div>
</div>
/** element---任意的元素  attr---属性 * */
function getAttrValue(element,attr) {
    return element.currentStyle?element.currentStyle[attr] : window.getComputedStyle(element,null)[attr]||0;
}

function animate(element,json,fn) {
    clearInterval(element.timeId);
    element.timeId=setInterval(function () {
        var flag=true;//假设都达到了目标
        for(var attr in json){
            if(attr=="opacity"){//判断属性是不是opacity
                var current= getAttrValue(element,attr)*100;  //每次移动多少步
                var target=json[attr]*100;//直接赋值给一个变量
                var step=(target-current)/10;//(目标-当前)/10
                step=step>0?Math.ceil(step):Math.floor(step);
                current=current+step;
                element.style[attr]=current/100;
            }else if(attr=="zIndex"){//判断属性是不是zIndex
                element.style[attr]=json[attr];
            }else{//普通的属性
                //获取当前的位置----getAttrValue(element,attr)获取的是字符串类型
                var current= parseInt(getAttrValue(element,attr))||0;
                //每次移动多少步
                var target=json[attr];//直接赋值给一个变量
                var step=(target-current)/10;//(目标-当前)/10
                step=step>0?Math.ceil(step):Math.floor(step);
                current=current+step;
                element.style[attr]=current+"px";
            }
            if(current!=target){
                flag=false;//如果没到目标结果就为false
            }
        }
        if(flag){//结果为true
            clearInterval(element.timeId);
            if(fn){//如果用户传入了回调的函数
                fn(); //就直接的调用,
            }
        }
        console.log("target:"+target+"current:"+current+"step:"+step);
    },10);
}

var config = [
      {
        width: 400,
        top: 20,
        left: 50,
        opacity: 0.2,
        zIndex: 2
      },//0
      {
        width: 600,
        top: 70,
        left: 0,
        opacity: 0.8,
        zIndex: 3
      },//1
      {
        width: 800,
        top: 100,
        left: 200,
        opacity: 1,
        zIndex: 4
      },//2
      {
        width: 600,
        top: 70,
        left: 600,
        opacity: 0.8,
        zIndex: 3
      },//3
      {
        width: 400,
        top: 20,
        left: 750,
        opacity: 0.2,
        zIndex: 2
      }//4
    ];
//页面加载的事件
    window.onload = function () {
      var flag=true;//假设所有的动画执行完毕了
      var list = document.getElementById("slide").getElementsByTagName("li");
      //1---图片散开
      function assign() {
        for (var i = 0; i < list.length; i++) {
          //设置每个li,都要把宽,层级,透明度,left,top到达指定的目标位置
          animate(list[i], config[i],function () {
            flag=true;
          });
        }
      }
      assign();
      //右边按钮
      document.getElementById("arrRight").onclick = function () {
        if(flag){
          flag=false;
          config.push(config.shift());
          assign();//重新分配
        }
      };
      //左边按钮
      document.getElementById("arrLeft").onclick = function () {
        if(flag){
          flag=false;
          config.unshift(config.pop());
          assign();
        }
      };
      //鼠标进入,左右焦点的div显示
      document.getElementById("slide").onmouseover = function () {
        animate(document.getElementById("arrow"), {"opacity": 1});
      };
      //鼠标离开,左右焦点的div隐藏
      document.getElementById("slide").onmouseout = function () {
        animate(document.getElementById("arrow"), {"opacity": 0});
      };
    };

拖拽的对话框:

.login-header {
      width: 100%;
      text-align: center;
      height: 30px;
      font-size: 24px;
      line-height: 30px;
    }
    ul, li, ol, dl, dt, dd, div, p, span, h1, h2, h3, h4, h5, h6, a {
      padding: 0px;
      margin: 0px;
    }
    .login {
      width: 512px;
      position: absolute;
      border: #ebebeb solid 1px;
      height: 280px;
      left: 50%;
      right: 50%;
      background: #ffffff;
      box-shadow: 0px 0px 20px #ddd;
      z-index: 9999;
      margin-left: -250px;
      margin-top: 140px;
      display: none;
    }
    .login-title {
      width: 100%;
      margin: 10px 0px 0px 0px;
      text-align: center;
      line-height: 40px;
      height: 40px;
      font-size: 18px;
      position: relative;
      cursor: move;
      -moz-user-select: none; /*火狐*/
      -webkit-user-select: none; /*webkit浏览器*/
      -ms-user-select: none; /*IE10*/
      -khtml-user-select: none; /*早期浏览器*/
      user-select: none;
    }
    .login-input-content {
      margin-top: 20px;
    }
    .login-button {
      width: 50%;
      margin: 30px auto 0px auto;
      line-height: 40px;
      font-size: 14px;
      border: #ebebeb 1px solid;
      text-align: center;
    }
    .login-bg {
      width: 100%;
      height: 100%;
      position: fixed;
      top: 0px;
      left: 0px;
      background: #000000;
      filter: alpha(opacity=30);
      -moz-opacity: 0.3;
      -khtml-opacity: 0.3;
      opacity: 0.3;
      display: none;
    }
    a {
      text-decoration: none;
      color: #000000;
    }
    .login-button a {
      display: block;
    }
    .login-input input.list-input {
      float: left;
      line-height: 35px;
      height: 35px;
      width: 350px;
      border: #ebebeb 1px solid;
      text-indent: 5px;
    }
    .login-input {
      overflow: hidden;
      margin: 0px 0px 20px 0px;
    }
    .login-input label {
      float: left;
      width: 90px;
      padding-right: 10px;
      text-align: right;
      line-height: 35px;
      height: 35px;
      font-size: 14px;
    }
    .login-title span {
      position: absolute;
      font-size: 12px;
      right: -20px;
      top: -30px;
      background: #ffffff;
      border: #ebebeb solid 1px;
      width: 40px;
      height: 40px;
      border-radius: 20px;
    }
<div class="login-header"><a id="link" href="javascript:void(0);">点击,弹出登录框</a></div>
<div id="login" class="login">
  <div id="title" class="login-title">登录会员
    <span><a id="closeBtn" href="javascript:void(0);" class="close-login">关闭</a></span></div>
  <div class="login-input-content">
    <div class="login-input">
      <label>用户名:</label>
      <input type="text" placeholder="请输入用户名" name="info[username]" id="username" class="list-input">
    </div>
    <div class="login-input">
      <label>登录密码:</label>
      <input type="password" placeholder="请输入登录密码" name="info[password]" id="password" class="list-input">
    </div>
  </div>
  <div id="loginBtn" class="login-button"><a href="javascript:void(0);" id="login-button-submit">登录会员</a></div>
</div><!--登录框-->
<div id="bg" class="login-bg"></div><!--遮挡层-->
//获取超链接,注册点击事件,显示登录框和遮挡层
  document.getElementById("link").onclick = function () {
    document.getElementById("login").style.display = "block";
    document.getElementById("bg").style.display = "block";
  };
  //获取关闭,注册点击事件,隐藏登录框和遮挡层
  document.getElementById("closeBtn").onclick = function () {
    document.getElementById("login").style.display = "none";
    document.getElementById("bg").style.display = "none";
  };
  //按下鼠标,移动鼠标,移动登录框
  document.getElementById("title").onmousedown = function (e) {
    //获取此时的可视区域的横坐标-此时登录框距离左侧页面的横坐标
    var spaceX = e.clientX - document.getElementById("login").offsetLeft;
    var spaceY = e.clientY - document.getElementById("login").offsetTop;
    //移动的事件
    document.onmousemove = function (e) {
      //新的可视区域的横坐标-spaceX====>新的值--->登录框的left属性
      var x = e.clientX - spaceX+250;
      var y = e.clientY - spaceY-140;
      document.getElementById("login").style.left = x + "px";
      document.getElementById("login").style.top = y + "px";
    }
  };
  document.onmouseup=function () {
    document.onmousemove=null;//当鼠标抬起的时候,把鼠标移动事件干掉
  };

高清放大镜:

* {
      margin: 0;
      padding: 0;
    }

    .box {
      width: 350px;
      height: 350px;
      margin: 100px;
      border: 1px solid #ccc;
      position: relative;
    }

    .big {
      width: 400px;
      height: 400px;
      position: absolute;
      top: 0;
      left: 360px;
      border: 1px solid #ccc;
      overflow: hidden;
      display: none;
    }
    .mask {
      width: 175px;
      height: 175px;
      background: rgba(255, 255, 0, 0.4);
      position: absolute;
      top: 0px;
      left: 0px;
      cursor: move;
      display: none;
    }
    .small {
      position: relative;
    }
  
<div class="box" id="box">
  <div class="small"><!--小层-->
    <img src="images/small.png" width="350" alt=""/>
    <div class="mask"></div><!--遮挡层-->
  </div><!--小图-->
  <div class="big"><!--大层-->
    <img src="images/big.jpg" width="800" alt=""/><!--大图-->
  </div><!--大图-->
</div>
//获取需要的元素
  var box = document.getElementById("box");
  //获取小图的div
  var small = box.children[0];
  //遮挡层
  var mask = small.children[1];
  //获取大图的div
  var big = box.children[1];
  //获取大图
  var bigImg = big.children[0];

  //鼠标进入显示遮挡层和大图的div
  box.onmouseover = function () {
    mask.style.display = "block";
    big.style.display = "block";
  };
  //鼠标离开隐藏遮挡层和大图的div
  box.onmouseout = function () {
    mask.style.display = "none";
    big.style.display = "none";
  };

  //鼠标的移动事件---鼠标是在小层上移动
  small.onmousemove = function (e) {
    //鼠标此时的可视区域的横坐标和纵坐标
    //主要是设置鼠标在遮挡层的中间显示
    var x = e.clientX - mask.offsetWidth / 2;
    var y = e.clientY - mask.offsetHeight / 2;
    //主要是margin的100px的问题
    x = x - 100;
    y = y - 100;
    //横坐标的最小值
    x = x < 0 ? 0 : x;
    //纵坐标的最小值
    y = y < 0 ? 0 : y;
    //横坐标的最大值
    x = x > small.offsetWidth - mask.offsetWidth ? small.offsetWidth - mask.offsetWidth : x;
    //纵坐标的最大值
    y = y > small.offsetHeight - mask.offsetHeight ? small.offsetHeight - mask.offsetHeight : y;
    //为遮挡层的left和top赋值
    mask.style.left = x + "px";
    mask.style.top = y + "px";

    //遮挡层的移动距离/大图的移动距离=遮挡层的最大移动距离/大图的最大移动距离
    //大图的移动距离=遮挡层的移动距离*大图的最大移动距离/遮挡层的最大移动距离

    //大图的横向的最大移动距离
    var maxX = bigImg.offsetWidth - big.offsetWidth;

    //大图的纵向的最大移动距离
    //var maxY = bigImg.offsetHeight - big.offsetHeight;

    //大图的横向移动的坐标
    var bigImgMoveX = x * maxX / (small.offsetWidth - mask.offsetWidth);
    //大图的纵向移动的坐标
    var bigImgMoveY = y * maxX / (small.offsetWidth - mask.offsetWidth);

    //设置图片移动
    bigImg.style.marginLeft = -bigImgMoveX + "px";
    bigImg.style.marginTop = -bigImgMoveY + "px";

  };

自制滚动条:

* {
      margin: 0;
      padding: 0;
    }

    .box {
      width: 300px;
      height: 500px;
      border: 1px solid red;
      margin: 100px;
      position: relative;
      overflow: hidden;
    }

    .content {
      padding: 5px 18px 5px 5px;
      position: absolute;
      top: 0;
      left: 0;
    }

    .scroll {
      width: 18px;
      height: 100%;
      position: absolute;
      top: 0;
      right: 0;
      background-color: #eee;
    }

    .bar {
      height: 100px;
      width: 100%;
      position: absolute;
      top: 0;
      left: 0;
      background-color: red;
      border-radius: 10px;
      cursor: pointer;
    }
 
<div class="box" id="box">
  <div class="content" id="content">
    民族复兴,急需坚不可摧护国神盾,中华强国梦与强军梦汇成必由之路。古田再出发正风肃纪寻根溯源,人民军队踏上建设世界一流新征程。铁律治军革弊鼎新以重塑威武之师,胜战三问锻造战之必胜的劲旅精兵。军民合作自主创新提升国之大器,英雄辈出为改革强军洒血奉献。40年,从封闭半封闭到全方位开放,中国改革开放的脚步坚定有力,谱写出与世界共同发展的崭新篇章。40年,从最初国际事务的旁观者,到全球治理的参与者、建设者、贡献者。构建人类命运共同体,实现共赢共享,在世界的交响乐中,奏响了中国旋律。“一带一路”、青岛上合峰会,中非论坛、进口博览会,岁月见证着中国推动世界和平发展、合作共赢的坚定决心。如今,新时代的中国,正与世界一道,为全人类开创更加美好,更加值得期待的明天。
民族复兴,急需坚不可摧护国神盾,中华强国梦与强军梦汇成必由之路。古田再出发正风肃纪寻根溯源,人民军队踏上建设世界一流新征程。铁律治军革弊鼎新以重塑威武之师,胜战三问锻造战之必胜的劲旅精兵。军民合作自主创新提升国之大器,英雄辈出为改革强军洒血奉献。40年,从封闭半封闭到全方位开放,中国改革开放的脚步坚定有力,谱写出与世界共同发展的崭新篇章。40年,从最初国际事务的旁观者,到全球治理的参与者、建设者、贡献者。构建人类命运共同体,实现共赢共享,在世界的交响乐中,奏响了中国旋律。“一带一路”、青岛上合峰会,中非论坛、进口博览会,岁月见证着中国推动世界和平发展、合作共赢的坚定决心。如今,新时代的中国,正与世界一道,为全人类开创更加美好,更加值得期待的明天。
民族复兴,急需坚不可摧护国神盾,中华强国梦与强军梦汇成必由之路。古田再出发正风肃纪寻根溯源,人民军队踏上建设世界一流新征程。铁律治军革弊鼎新以重塑威武之师,胜战三问锻造战之必胜的劲旅精兵。军民合作自主创新提升国之大器,英雄辈出为改革强军洒血奉献。40年,从封闭半封闭到全方位开放,中国改革开放的脚步坚定有力,谱写出与世界共同发展的崭新篇章。40年,从最初国际事务的旁观者,到全球治理的参与者、建设者、贡献者。构建人类命运共同体,实现共赢共享,在世界的交响乐中,奏响了中国旋律。“一带一路”、青岛上合峰会,中非论坛、进口博览会,岁月见证着中国推动世界和平发展、合作共赢的坚定决心。如今,新时代的中国,正与世界一道,为全人类开创更加美好,更加值得期待的明天。
民族复兴,急需坚不可摧护国神盾,中华强国梦与强军梦汇成必由之路。古田再出发正风肃纪寻根溯源,人民军队踏上建设世界一流新征程。铁律治军革弊鼎新以重塑威武之师,胜战三问锻造战之必胜的劲旅精兵。军民合作自主创新提升国之大器,英雄辈出为改革强军洒血奉献。40年,从封闭半封闭到全方位开放,中国改革开放的脚步坚定有力,谱写出与世界共同发展的崭新篇章。40年,从最初国际事务的旁观者,到全球治理的参与者、建设者、贡献者。构建人类命运共同体,实现共赢共享,在世界的交响乐中,奏响了中国旋律。“一带一路”、青岛上合峰会,中非论坛、进口博览会,岁月见证着中国推动世界和平发展、合作共赢的坚定决心。如今,新时代的中国,正与世界一道,为全人类开创更加美好,更加值得期待的明天。
民族复兴,急需坚不可摧护国神盾,中华强国梦与强军梦汇成必由之路。古田再出发正风肃纪寻根溯源,人民军队踏上建设世界一流新征程。铁律治军革弊鼎新以重塑威武之师,胜战三问锻造战之必胜的劲旅精兵。军民合作自主创新提升国之大器,英雄辈出为改革强军洒血奉献。40年,从封闭半封闭到全方位开放,中国改革开放的脚步坚定有力,谱写出与世界共同发展的崭新篇章。40年,从最初国际事务的旁观者,到全球治理的参与者、建设者、贡献者。构建人类命运共同体,实现共赢共享,在世界的交响乐中,奏响了中国旋律。“一带一路”、青岛上合峰会,中非论坛、进口博览会,岁月见证着中国推动世界和平发展、合作共赢的坚定决心。如今,新时代的中国,正与世界一道,为全人类开创更加美好,更加值得期待的明天。
    民族复兴,急需坚不可摧护国神盾,中华强国梦与强军梦汇成必由之路。古田再出发正风肃纪寻根溯源,人民军队踏上建设世界一流新征程。铁律治军革弊鼎新以重塑威武之师,胜战三问锻造战之必胜的劲旅精兵。军民合作自主创新提升国之大器,英雄辈出为改革强军洒血奉献。40年,从封闭半封闭到全方位开放,中国改革开放的脚步坚定有力,谱写出与世界共同发展的崭新篇章。40年,从最初国际事务的旁观者,到全球治理的参与者、建设者、贡献者。构建人类命运共同体,实现共赢共享,在世界的交响乐中,奏响了中国旋律。“一带一路”、青岛上合峰会,中非论坛、进口博览会,岁月见证着中国推动世界和平发展、合作共赢的坚定决心。如今,新时代的中国,正与世界一道,为全人类开创更加美好,更加值得期待的明天。

  </div><!--文字内容-->
  <div id="scroll" class="scroll"><!--装滚动条的层-->
    <div class="bar" id="bar"></div><!--滚动条-->
  </div>
</div>
//获取需要的元素
  //最外面的div
  var box = document.getElementById("box");
  //文字div
  var content = document.getElementById("content");
  //装滚动条的div---容器
  var scroll = document.getElementById("scroll");
  //滚动条
  var bar = document.getElementById("bar");

  //设置滚动条的高度
  //滚动条的高/装滚动条的div的高=box的高/文字div的高
  //滚动条的高=装滚动条的div的高*box的高/文字div的高
  var height = scroll.offsetHeight * box.offsetHeight / content.offsetHeight;
  bar.style.height = height + "px";

  //移动滚动条
  bar.onmousedown = function (e) {
    var spaceY = e.clientY - bar.offsetTop;
    document.onmousemove = function (e) {//移动事件
      var y = e.clientY - spaceY;
      y=y<0?0:y;//最小值
      y=y>scroll.offsetHeight-bar.offsetHeight?scroll.offsetHeight-bar.offsetHeight:y;
      bar.style.top = y + "px";

      //设置鼠标移动的时候,文字不被选中

      window.getSelection? window.getSelection().removeAllRanges():document.selection.empty();

      //滚动条的移动距离/文字div的移动距离=滚动条最大的移动距离/文字div的最大移动距离

      //文字div的移动距离=滚动条的移动距离*文字div的最大移动距离/滚动条最大的移动距离

      var moveY=y*(content.offsetHeight-box.offsetHeight)/(scroll.offsetHeight-bar.offsetHeight);
      //设置文字div的移动距离
      content.style.marginTop=-moveY+"px";
    };
  };

  document.onmouseup=function () {
    //鼠标抬起的时候,把移动事件干掉
    document.onmousemove=null;
  };

tab切换:

#list li {
      list-style-type: none;
      width: 80px;
      height: 30px;
      line-height: 30px;
      background-color: beige;
      text-align: center;
      float: left;
      margin-left: 5px;
    }

    #list li.current {
      background-color: burlywood;
    }

    #list li a {
      text-decoration: none;
    }
  
<div id="menu">
  <ul id="list">
    <li class="current"><a href="http://www.baidu.com">首页</a>
    </li>
    <li><a href="javascript:void(0)">播客</a></li>
    <li><a href="javascript:void(0)">博客</a></li>
    <li><a href="javascript:void(0)">相册</a></li>
    <li><a href="javascript:void(0)">关于</a></li>
    <li><a href="javascript:void(0)">帮助</a></li>
  </ul>
</div>

  //获取所有的li标签,
  var liObjs=document.getElementById("list").getElementsByTagName("li");
  //循环遍历,找到每个li中的a,注册点击事件
  for(var i=0;i<liObjs.length;i++){
    //每个li中的a
    var aObj=getFirstElement(liObjs[i]);
    aObj.onclick=function () {
      //第一件事:把这个a所在的li的所有的兄弟元素的类样式全部移除
      for(var j=0;j<liObjs.length;j++){
        liObjs[j].removeAttribute("class");
      }
      //第二件事:
      //当前点击的a的父级元素li(点击的这个a所在的父级元素li),设置背景颜色
      this.parentNode.className="current";
      return false;//阻止超链接跳转
    };
  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值