1. 程式人生 > 實用技巧 >JavaScript(四)

JavaScript(四)

1.圖層移動:遇到右邊距彈回來,遇到左邊距再彈回去

2.滑鼠拖拽移動圖層:滑鼠按住拖動圖層,鬆開之後圖層停留在滑鼠鬆開的位置

3.通過點選關閉按鈕將廣告層隱藏:

4.摺疊選單:通過點選主選單將子選單進行展開或隱藏

5.實現迴圈播放廣告:

6.查詢的資訊分頁:

圖層移動:遇到右邊距彈回來,遇到左邊距再彈回去

  主要是比較左邊距和瀏覽器的邊緣位置是否相同,如果相同就彈回

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<style type="text/css">
.d1{
    width:100px ;
    height:100px ;
    background
-color: red; position:absolute ; left: 0px; top: 100px; } </style> <body> <input type="button" value="start" id="btnStart" name=""> <div class="d1"></div> </body> </html> <script type="text/javascript"> var d1=document.querySelector(".d1");
var btnStart=document.getElementById("btnStart"); btnStart.onclick=moveRight;   //水平移動方向的標識,0表示向右移動,1表示向左移動 var h=0; //獲取層的樣式 var style=window.getComputedStyle(d1); function moveRight(){ var left=parseInt(style.left); //根據元素目前在的狀態判斷往哪走 if(h==0){ d1.style.left
=left+1+"px"; } else{ d1.style.left=left-1+"px"; } //判斷是否移動到瀏覽器的右邊緣位置並修改標識 left=parseInt(style.left); if(left>=document.documentElement.clientWidth-d1.clientWidth){ h=1; } //判斷是否移動到瀏覽器的左邊緣位置並修改標識 else if(left<=0){ h=0; } window.setTimeout("moveRight()",10); } </script>

例子:圖層能夠在頁面中斜下45度角移動。碰到頁面邊緣就彈回

  主要是left和top同時進行位置的座標改變

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<style type="text/css">
    .d1{
        width: 100px;
        height: 100px;
        background-color: #2A7EB0;
        position: absolute;
        left: 200px;
        top: 300px;
    }
</style>
<body>
<input type="button" value="start" id="btnStart" name="">
<div class="d1"></div>
</body>
</html>
<script type="text/javascript">
    var d1 = document.querySelector(".d1");
    var btnStart = document.getElementById("btnStart");
    btnStart.onclick = moveRight;

    //水平移動方向的標識 0表示向右移動 1表示向左移動
    var h = 0;
    //垂直移動方向的標識 0表示向下移動 1表示向上移動
    var v = 0;

    //獲取層的樣式
    var style = window.getComputedStyle(d1);
    function moveRight(){
        //獲取層的左邊距
        var left = parseInt(style.left);
        //判斷水平移動的方向
        if(h == 0){
        //如果是0則向右移動 d1.style.left
= left+1+"px"; } else{
        //如果是1則向左移動 d1.style.left
= left-1+"px"; } //判斷是否移動到瀏覽器右邊緣位置(修改標識用來判斷向哪個方向移動) left = parseInt(style.left);
      //到達了右邊界,修改為1開始向左移動 if(left >= document.documentElement.clientWidth-d1.clientWidth){ h = 1; } //判斷瀏覽器左邊緣的位置,到達了左邊界,修改為0開始向右移動 else if(left <= 0){ h = 0; } //獲取層的上邊距 var top = parseInt(style.top); //判斷垂直移動方向 if(v == 0){ d1.style.top = top+1+"px"; } else{ d1.style.top = top-1+"px"; } top = parseInt(style.top); console.log(top+","+(document.documentElement.clientHeight-d1.clientHeight)); //判斷是否到達螢幕底部邊緣(判斷修改標識用來判斷向哪個方向移動) if(top >= document.documentElement.clientHeight-d1.clientHeight){ v = 1; } else if(top <= 0){ v = 0; } window.setTimeout("moveRight()",10); } </script>

滑鼠拖拽移動圖層:滑鼠按住拖動圖層,鬆開之後圖層停留在滑鼠鬆開的位置

  方法一:圖層原來與頁面的邊距 + 滑鼠移動的距離(滑鼠當前的座標-滑鼠開始點選的座標):原來的圖層與頁面邊距、原滑鼠點選座標、滑鼠當前的座標

  方法二:圖層移動的距離(當前圖層與頁面的邊距-原來圖層與頁面的邊距)-滑鼠相較於圖層的邊距(滑鼠的座標-層的邊距):滑鼠相較於圖層的邊距、原來圖層與頁面的邊距、當前圖層與頁面的邊距

方法一:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<style type="text/css">
    .d1{
        width: 100px;
        height: 100px;
        background-color: #2A7EB0;
        position: absolute;
        left: 200px;
        top: 300px;
    }
</style>
<body>
<div class="d1"></div>
</body>
</html>
<script type="text/javascript">
    /**
     * 層的拖拽思路:
     * 通過3個事件動作協同完成
     * onmousedown
     * onmousemove
     * onmouseup
     */
    
    var d1 = document.querySelector(".d1");
    var style = window.getComputedStyle(d1);

    //滑鼠的按下座標
    var x;
    var y;
    //層的初始邊距
    var initLeft;
    var initTop;
    //滑鼠按下的狀態
    var hasDown = false;
    /**
     * 滑鼠按下
     * [onmousedown description]
     * @return {[type]} [description]
     */
    d1.onmousedown = function(){
        //記錄滑鼠按下的狀態
        hasDown = true;
        //記錄滑鼠按下的座標
        x = event.clientX;
        y = event.clientY;
        //記錄當前層的邊距
        initLeft = parseInt(style.left);
        initTop = parseInt(style.top);
    }
    /**
     * 滑鼠鬆開
     * [onmouseup description]
     * @return {[type]} [description]
     */
    d1.onmouseup = function(){
        //修改滑鼠按下的狀態
        hasDown = false;
    }
    /**
     * 頁面中進行的滑鼠移動
     * [onmousemove description]
     * @return {[type]} [description]
     */
    document.onmousemove = function(){
        //如果滑鼠按下
        if(hasDown){
            //記錄移動中滑鼠的座標
            var nowX = event.clientX;
            var nowY = event.clientY;
            //計算移動的距離
            var moveX = nowX-x;
            var moveY = nowY-y;
            //根據移動的距離設定層的邊距
            d1.style.left = initLeft+moveX+"px";
            d1.style.top = initTop+moveY+"px";
        }
        
    }
    
</script>

方法二:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<style type="text/css">
    .d1{
        width: 100px;
        height: 100px;
        background-color: #2A7EB0;
        position: absolute;
        left: 200px;
        top: 300px;
    }
</style>
<body>
<div class="d1"></div>
</body>
</html>
<script type="text/javascript">
    /**
     * 層的拖拽思路:
     * 通過3個事件動作協同完成
     * onmousedown
     * onmousemove
     * onmouseup
     */
    
    var d1 = document.querySelector(".d1");
    var style = window.getComputedStyle(d1);


    //按下點與層邊框的距離
    var x;
    var y;
    //滑鼠按下的狀態
    var hasDown = false;
    /**
     * 滑鼠按下
     * [onmousedown description]
     * @return {[type]} [description]
     */
    d1.onmousedown = function(){
        //記錄滑鼠按下的狀態
        hasDown = true;
        //獲取按下的滑鼠座標
        var nowX = event.clientX;
        var nowY = event.clientY;
        //獲取層的邊距
        var divLeft = parseInt(style.left);
        var divTop = parseInt(style.top);
        //計算滑鼠座標與邊距的距離
        x = nowX-divLeft;
        y = nowY-divTop;
    }
    /**
     * 滑鼠鬆開
     * [onmouseup description]
     * @return {[type]} [description]
     */
    d1.onmouseup = function(){
        //修改滑鼠按下的狀態
        hasDown = false;
    }
    /**
     * 頁面中進行的滑鼠移動
     * [onmousemove description]
     * @return {[type]} [description]
     */
    document.onmousemove = function(){
        //如果滑鼠按下
        if(hasDown){
            //記錄移動中滑鼠的座標
            var nowX = event.clientX;
            var nowY = event.clientY;
            //根據按下滑鼠與層的邊距,計算層的邊距
            d1.style.left = nowX-x+"px";
            d1.style.top = nowY-y+"px";
        }
        
    }
    
</script>

通過點選關閉按鈕將廣告層隱藏:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<style type="text/css">
    .ad{
        width: 180px;
        height: 230px;
        background-image: url(image/advpic.gif);
        position: absolute;
        left: 300px;
        top: 100px;
    }
    .ad>div{
        width: 13px;
        height: 13px;
        background-image: url(image/close.jpg);
        position: relative;
        left: 167px;
        top: 217px;
        cursor: pointer;
    }
</style>
<body>
<div class="ad">
    <div onclick="closeAd()"></div>//按鈕插在廣告層中
</div>
</body>
</html>
<script type="text/javascript">
    //獲取廣告層
    var ad = document.querySelector(".ad");
    function closeAd(){
        //將廣告層隱藏  none表示隱藏  block表示顯示
        ad.style.display = "none";
    }
</script>

摺疊選單:通過點選主選單將子選單進行展開或隱藏

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<style type="text/css">
    .menu{
        margin-left: 50px;
    }
    .menu li{
        list-style-image: url(image/z-1.jpg);
        height: 30px;
        line-height: 30px;
    }
    .main{
        height: 30px;
        cursor: pointer;
    }
    .subItem{
        display: none;
    }
</style>
<body>
    <div class="menu">
        <div class="main" onclick="showMenu(this)"><img src="image/fclose.gif">Java技術</div>
        <!-- 子選單 -->
        <div class="subItem">
            <li>JavaSE</li>
            <li>Java Web</li>
            <li>Eclipse</li>
            <li>Java其他相關</li>
        </div>
    </div>
</body>
</html>
<script type="text/javascript">
    //選單是否展開的標識(展開點選就隱藏,隱藏點選就展開)
    var flag = false;
    /**
     * 展示選單
     * [showMenu description]
     * @return {[type]} [description]
     */
    function showMenu(menu){
        //選單中的圖片
        var img = menu.getElementsByTagName("img")[0];
        //子選單
        var subItem = document.querySelector(".subItem");
        if(!flag){
            //修改選單的圖片
            img.src = "image/fold.gif";
            //將子選單顯示
            subItem.style.display = "block";
            //修改選單展開的標識
            flag = true;
        }
        else{
            //修改選單的圖片
            img.src = "image/fclose.gif";
            //將子選單隱藏
            subItem.style.display = "none";
            //修改選單展開的標識
            flag = false;
        }
    }
</script>

實現迴圈播放廣告:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<style type="text/css">
    .ad{
        width: 360px;
        height: 190px;
        background-image: url(image/ad-01.jpg);
    }
    .ad div{
        width: 20px;
        height: 20px;
        background-color: #2C61AF;
        color: white;
        float: left;
        position: relative;
        left: 280px;
        top: 170px;
        text-align: center;
        line-height: 20px;
        font-size: 13px;
        cursor: pointer;
    }
    #active{
        background-color: white;
        color: #2C61AF;
    }
</style>
<body>

<div class="ad">
    <div>1</div>
    <div>2</div>
    <div id="active">3</div>
    <div>4</div>
</div>
</body>
</html>
<script type="text/javascript">
    var ad = document.querySelector(".ad");
    //播放圖片的索引
    var index = 1;
    /**
     * 輪播廣告
     * [playAd description]
     * @return {[type]} [description]
     */
    function playAd(){
        //變更圖片
        ad.style.backgroundImage = "url(image/ad-0"+index+".jpg)";
        //修改圖片索引
        index++;
        if(index > 4){
            index = 1;
        }
        //開啟定時器(為了反覆執行)
        window.setTimeout("playAd()",1000);
    }
    playAd();
</script>

查詢的資訊分頁:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<style type="text/css">
    .pageContent{
        height: 200px;
    }
</style>
<body>
<div  style="height: 3000px; background-color: #FDC7C7"></div>
<div class="container"></div>
</body>
</html>

<script type="text/javascript">
    //每頁的高度
    var size = 200;
    //當前頁碼
    var page = 1; 
    //原始的頁面高度,決定了在該位置的基礎上進行滾動條下拉實現分頁
    var init = 1500;
    //總的頁面數
    var total = 15;
    //頁面顯示的容器
    var container = document.querySelector(".container");
    //滾動條的滾動事件
    window.onscroll = function(){
        //獲取滾動的距離
        //console.log(document.documentElement.scrollTop);
        var scrollTop = document.documentElement.scrollTop;
        //如果滾動的距離超過了原始頁面高度,根據頁碼值決定分頁的載入
        if(scrollTop >= init+page*size && page <= total){
            //載入分頁的內容
            container.innerHTML += "<div class='pageContent'><img src='image/head/"+page+".gif'></div>";
            page++;
        }

    }
</script>