0

私は、自分の練習/楽しみのために行っているプロジェクトのために、JQuery を使用せずに水平スライダーを作成しようとしています。

関連するコードは次のとおりです。

function moveit() {
    "use strict";
    document.getElementById("position").style.left = window.event.clientX + "px";
}

window.onload = function () {
    "use strict";
    findtime();
    document.getElementById("scrollbar").style.width = document.getElementById("thevideo").offsetWidth + "px";
    var mousemove;
    document.getElementById("scrollbar").onclick = function () {
            mousemove = window.setInterval("moveit()", 1000);
    };
    document.getElementById("scrollbar").mouseup = function () {
            window.clearInterval(mousemove);
    };
};

言うまでもなく、私はそれに問題を抱えています。Chrome、Firefox などで常にエラーが生成されます。

Uncaught TypeError: Cannot read property 'clientX' of undefined

ただし、次のコードを実行すると機能します(ただし、マウスの位置を追跡するのには役立ちません)。

document.getElementById("position").style.left = 12 + "px";

HTML は次のとおりです。

<?php include("header.php"); ?>
            <div>
                    <video id="thevideo">
                            <source src="movie.ogv" type="video/ogg" />
                    </video>
            </div>
            <div>
                    <span id="currenttime" contenteditable="true">0:00</span> / <span id="totaltime"></span>
            </div>
            <div id="scrollbar">
                    <div id="position" draggable="true"></div>
            </div>
<?php include("footer.php"); ?>
4

2 に答える 2

0

これは私がしばらく前に作成したものです。おそらく、プログラムに合わせて調整できます。

var scrollTimer;

function Timer(callback, delay) {
    var timerId, start, remaining = delay;
    this.pause = function() {
        window.clearTimeout(timerId);
        remaining -= new Date() - start;
    };
    this.resume = function() {
        start = new Date();
        timerId = window.setTimeout(callback, remaining);
    };
    this.resume();
}

function scroll(down) {
  var scrollframe = document.getElementById("contentframe");
  var curY = document.all?
    scrollframe.contentWindow.document.body.scrollTop
  : scrollframe.contentWindow.window.pageYOffset;
  var delta = 5;
  var newY = down? curY+delta : curY-delta;
  scrollframe.contentWindow.scrollTo(0,newY);
}

function autoscroll(down) {
  scroll(down);
  scrollTimer = new Timer(function() {
    autoscroll(down);
  }, 20);
}

function stopscroll() {
  scrollTimer.pause();
}

関数 scroll(boolean down) は、 iframe への単一のdeltaインクリメンタルな上向きまたは下向きスクロールを引き起こしますcontentframe。タイマーはそのアクションを繰り返すために使用されます。使用方法は次のとおりです。

<a href=#>
<img src="scroller/arrowTop.png" title="Scroll Up"
    onMouseOver="autoscroll(false);" onMouseOut="stopscroll();"/>
</a>

お役に立てれば。

于 2012-04-20T20:58:26.223 に答える
0

window.eventもう少しです -標準の JS にはオブジェクトがありません。したがって、DOM Event Interfaceを使用します。

function moveit(e) {
    "use strict";
    document.getElementById("position").style.left = e.clientX + "px";
}

window.onload = function (e) {
    "use strict";
    findtime();
    document.getElementById("scrollbar").style.width = document.getElementById("thevideo").offsetWidth + "px";
    var mousemove;
    document.getElementById("scrollbar").onclick = function () {
            mousemove = window.setInterval(moveit, 1000);
    };
    document.getElementById("scrollbar").mouseup = function () {
            window.clearInterval(mousemove);
    };
};
于 2012-04-20T21:01:10.407 に答える