为了账号安全,请及时绑定邮箱和手机立即绑定

源代码(第三部分)

  // 5、 幻灯片的切换
                function switchSlider(n){
                    // 5.1获取要展现的幻灯片&按钮元素 DOM
                    var main = g('main_' + n);
                    var ctrl = g('ctrl_' + n);
                    
                    // 5.2获取所有幻灯片及控制按钮
                    var clear_main = g(".main-i");
                    var clear_ctrl = g(".ctrl-i");
                 
                    
                    /* 为什么下面的for循环中不能使用for...in呢,我们知道for...in可以用来遍历数组中的元素和
                    对象中的属性,通过g()得到的函数不是严格意义上的数组,是对象。
                    alert(typeof clear_main);
                    alert(clear_main instanceof Array);
                    
                    使用for...in遍历clear_main的过程中得到这些值:
                    0,1,2,3,4,5,6,item,namedItem,length。
                    我们只需要前面的数值。
                    */
                    /*
                    for(var i in clear_main){
                        alert(i);
                    }
                    */
                    
                    // 5.3清除active样式
                    // 这里只能使用普通for循环,不能使用for...in,
                    for(i = 0; i < clear_ctrl.length; i ++){
                        // 通过字符串替换函数把active样式去掉即可。
                        clear_main[i].className = clear_main[i].className.replace(' main-i_active','');
                        clear_ctrl[i].className = clear_ctrl[i].className.replace(' ctrl-i_active','');
                    }
                    
                    // 5.4为当前按钮和幻灯片添加附加样式。
                    // 只有添加了main-i_active样式幻灯片才会显示出来,否则在左边隐藏。
                    // 只有添加了ctrl-i_active样式控制按钮才会显示对应的效果,否则小图片不显示。
                    main.className += ' main-i_active';
                    ctrl.className += ' ctrl-i_active';
                    
                    /*
                    7.2、替换main_background的背景图片,之前这张背景图片一直是{{index}}.jpg
                        这里动态的修改为当前切换的图片。
                    */
                    setTimeout(function(){
                        g("main_background").innerHTML = main.innerHTML;
                    },500);
                }
                
                /*
                6、动态调整图片的margin-top以使其垂直居中(如果没有设置垂直居中,
                图片下面没有显示出来,overflow部分隐藏了,上面我们不想看到的区域显示出来了)
                */
                function movePicture(){
                    var pictures = g(".picture");
                    for(i = 0; i < pictures.length; i ++){
                        /*
                        实现图片垂直居中的原理是:
                        把图片的中心放在距离顶部50%的位置,这样才能实现垂直居中。
                        */
                        pictures[i].style.marginTop = (-1 * pictures[i].clientHeight/2) + "px";
                    }
                }
                
                // 4、定义还是幻灯片输出(必须页面所有元素加载完成后开始)
                window.onload = function(){
                    addSliders();
                    /*
                    一定要有这个调用,否则页面加载后没有点击控制按钮的话,是没有幻灯片的。
                    这里默认就显示第一张图片。
                    */
                    switchSlider(4);
                    /*
                    为什么要推迟100毫秒再执行呢?因为图片按钮都是动态生成的, 因此必须保证
                    所有的按钮都生成完毕后再执行这个方法。
                    */
                    setTimeout(function(){
                        movePicture();
                    },100);
                }
            </script>
        </div>
    </body>
</html>

正在回答

0 回答

举报

0/150
提交
取消
JS+CSS3实现带预览图幻灯片效果
  • 参与学习       53759    人
  • 解答问题       265    个

同样的幻灯片,不一样的切换,学会实现思路,操作很简单

进入课程

源代码(第三部分)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信