全村儿人希望 发表于 2018-12-19 23:46

学了一个半月JS,是骡子是马也该牵出来遛遛了

本帖最后由 全村儿人希望 于 2018-12-19 23:54 编辑

前段时间刚学完Python爬虫,都说学爬虫最好也学学JS语言。
学了一个半月了,正尝试比着别人的网站写个网页,碰到个跑马灯的特效,不会写钻研几个小时功夫不负有心人


其它的就不拿出来了,主要是给各位大佬看看图片跑马灯源码,加注释了
代码写的不好,大神勿喷{:17_1072:}

效果视频 https://pan.baidu.com/s/1GoMXW_rtlSejtRl__BYDwA


HTML源码
<div id="img_list">

            <!--存放所有组图容器-->
            <div id="img_div">

                <!-- ul1组图 -->
                <ul id="ul1">
                  <li><a href="#"><img src="img/Body/荣誉证书1.jpg" /></a></li>
                  <li><a href="#"><img src="img/Body/荣誉证书2.jpg" /></a></li>
                  <li><a href="#"><img src="img/Body/荣誉证书3.jpg" /></a></li>
                  <li><a href="#"><img src="img/Body/荣誉证书4.jpg" /></a></li>
                  <li><a href="#"><img src="img/Body/荣誉证书5.jpg" /></a></li>
                  <li><a href="#"><img src="img/Body/荣誉证书6.jpg" /></a></li>
                  <li><a href="#"><img src="img/Body/荣誉证书7.jpg" /></a></li>
                  <li><a href="#"><img src="img/Body/荣誉证书8.jpg" /></a></li>

                </ul>

                <!-- ul2组图 -->
                <ul id="ul2">
                  <li><a href="#"><img src="img/Body/荣誉证书9.jpg" /></a></li>
                  <li><a href="#"><img src="img/Body/荣誉证书10.jpg" /></a></li>
                  <li><a href="#"><img src="img/Body/荣誉证书11.jpg" /></a></li>
                  <li><a href="#"><img src="img/Body/荣誉证书12.jpg" /></a></li>
                  <li><a href="#"><img src="img/Body/荣誉证书13.jpg" /></a></li>
                  <li><a href="#"><img src="img/Body/荣誉证书14.jpg" /></a></li>
                  <li><a href="#"><img src="img/Body/荣誉证书15.jpg" /></a></li>
                </ul>

            </div>
      </div>


CSS代码
#img_list{
    width: 1210px;
    overflow: hidden;                /* 溢出部分隐藏 */
}

/*存放组图容器*/
#img_list > #img_div{
    width: 0;
    height: 140px;
    position: relative;               /* 开启相对定位 */
}

/*荣誉证书图片大小*/
#img_list img{
    width: 210px;
    height: 140px;

}

#img_list ul{
    position: absolute;            /* 开启绝对定位 */
}

#img_list ul li{
    float: left;                     /* 设置浮动,使其横向显示 */
    padding-right: 8px;            /* 设置每个列表项右外边距 */
}

#ul2{
    left: 0;                         /* 兼容IE */
}


JS代码
window.onload = function () {
    // 获取图片容器
    var img_div = document.getElementById("img_div");

    // 获取所有图片
    var imgArr = img_div.getElementsByTagName("img");

    // 获取图片存放ul
    var ul1 = document.getElementById("ul1");
    var ul2 = document.getElementById("ul2");

    // 获取ul1所有图片
    var imgArr1 = ul1.getElementsByTagName("img");
    // 获取ul2所有图片
    var imgArr2 = ul2.getElementsByTagName("img");

    // 修改ul容器宽度
    img_div.style.width = imgArr.length * 8 + imgArr.length * 210 + "px";

    // 修改ul1水平偏移量,使其在ul2组图后面
    ul1.style.left = imgArr2.length * 8 + imgArr2.length * 210 + "px";

    // 开启定时器
    setInterval(function () {

      // 获取当前ul1偏移量
      var oldValue1 = parseInt(getComputedStyle(ul1).left);

      // 获取当前ul2偏移量
      var oldValue2 = parseInt(getComputedStyle(ul2).left);

      // ul2偏移量递减,并修改其CSS属性
      var newValue2 = oldValue2 - 1;
      ul2.style.left = newValue2 + "px";

      // ul1偏移量递减,并修改其CSS属性
      var newValue1 = oldValue1 - 1;
      ul1.style.left = newValue1 + "px";

      // 判断偏移量是否为负值
      if (!parseInt(getComputedStyle(ul1).left)){

            // 修改ul2偏移量为ul1组图的长度,使跑完的ul2组图放到ul1后面
            ul2.style.left = imgArr1.length * 210 + imgArr1.length * 8 + "px";

      }if(!parseInt(getComputedStyle(ul2).left)){
            ul1.style.left = imgArr2.length * 210 + imgArr2.length * 8 + "px";
      }

    // 每60毫秒执行一次
    }, 60)
};

netCheney 发表于 2018-12-20 10:40

本帖最后由 netCheney 于 2018-12-20 10:59 编辑

思路很清晰,如果用对象封装起来就可以实现代码重用了,前提是不要使用那么多的ID选择器,css中ID的权重是10,这样会加重网页解析的负担。另外,用window.onload()不是很好,document.ready()相对会好一点,具体资料可以搜索一下。代码可以更精简一点:
// 分割所有的图片成数组
var imgArr1= imgArr;
var imgArr2=imgArr;
这个是已知数量的情况,如果封装成类,就需要在获取所有数量的时候加上一个计数的变量
var ImgNum = imgArr.length;
因为每次用document.getElement来获取元素都是要对网页进行遍历的,会对JS运行效率有影响。这些都是思路,楼主看来是刚开始学习js,不要把它学的太刻板了啊,一点愚见,还望海涵。

991375252 发表于 2018-12-20 00:09

收藏了,学习学习

阳光天使之梦 发表于 2018-12-20 00:10

不仅厉害,还优秀呀

qaz003 发表于 2018-12-20 00:11

赞一个,以前用marquee 直接搞,不用JS。。

全村儿人希望 发表于 2018-12-20 00:13

qaz003 发表于 2018-12-20 00:11
赞一个,以前用marquee 直接搞,不用JS。。

学会原理才是王道

全村儿人希望 发表于 2018-12-20 00:15

阳光天使之梦 发表于 2018-12-20 00:10
不仅厉害,还优秀呀

想的都焦头烂额了{:1_908:}

全村儿人希望 发表于 2018-12-20 00:17

991375252 发表于 2018-12-20 00:09
收藏了,学习学习

努力共勉{:300_966:}

chenql 发表于 2018-12-20 00:19

厉害厉害{:1_927:}

mzhsohu 发表于 2018-12-20 00:55

为大神点赞,厉害了~{:1_921:}{:1_919:}

裸情似水 发表于 2018-12-20 01:01

楼主,0基础怎么学JS?
看过几个视频坚持不下去,请分享下经验,谢谢了
页: [1] 2 3 4 5
查看完整版本: 学了一个半月JS,是骡子是马也该牵出来遛遛了