アプリ版:「スタンプのみでお礼する」機能のリリースについて

ボタンを自動クリックするスクリプトは

setInterval( function() {
var load =document.getElementsByClassName('load-more')[0];
if(load.style.display != 'none') load.click();
});

という感じで書けて動作したのですが、例えば

if(load.style.display != 'none') load.click();
},10000);

などとした場合、表示されていない下の方にボタンがある場合でも延々とクリックされてしまいますよね?
load-moreのボタンが画面内にある時だけ自動クリックさせたいのですが、そのようなことは可能でしょうか?

A 回答 (2件)

こんにちは



Greasemonkeyはまったく存じませんが・・・


>画面内にある時だけ自動クリックさせたいのですが、
>そのようなことは可能でしょうか?
可能だと思います。

対象要素(var load)のドキュメント内の位置を取得して、
・そのtop位置が画面のscroll量以上で
・bottom位置が(画面のscroll量 + 表示画面の高さ)より小さければ
要素全体が表示されていると判断できます。
※ 横方向にもスクロールする場合は、横方向のチェックも必要です
※ 要素が全部表示されていなくても、少しでも見えているという場合は、上記と似た計算で判断可能でしょう。

上記の判断で、クリックするかどうか分岐すればよいのでは?

ただし、ご提示のスクリプトではInterval処理を止める記述がないみたいなので(どこか他にあるのかも知れませんが)、クリックするしないに関わらず処理自体は延々と繰り返されます。
遅延時間を指定したとしても、クリックしてから指定時間経っても同じような表示状態だと、条件判断を追加していても、やはり連続クリックが発生する可能性はあるでしょう。
    • good
    • 0

> if(load.style.display != 'none') load.click();



なら

if(load.style.display != 'none'){
load.style.display = 'none';
load.click();
}
と一度クリックしたら隠してしまうとか


if(load.style.display != 'none' && !load.getAttribute('data-flg')){
load.setAttribute('data-flg',1);
load.click();
}
のように、フラグを立ててやればよいのでは?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!