• 締切済み

スライダーでオブジェクト変数の値を変更するには?

JavaScript スライダーでオブジェクト変数の値を変更するには? <div id="wrap"> <div class="target">○</div> <div class="target">○</div> <div class="target">○</div> </div> <div>delay : <input type="range" id="delay_slider" min="0" max="100" value="0" step="10"> <span id="delay_slider_span">0</span> </div> <script> //全ての対象要素を取得して配列に変換 const targets = Array.from(document.querySelectorAll('#wrap .target')); const animations = []; //生成アニメーションの格納配列 //取得した要素にアニメーションを設定 targets.forEach((target, i) => { const animation = target.animate( [ { transform: 'translateX(0px)'}, { transform: 'translateX(60px)'}, ], { duration: 500, fill: 'forwards', delay: 0, endDelay: 0 } ); animation.cancel(); animations.push(animation); }); </script> スライダー要素を動かして、 オブジェクト変数の値「delay」を変更するためには どういうコードで実現できますか? くわしい方のお力添えをお待ちしております。

みんなの回答

回答No.4

>アニメーションコードは配列に格納していますので >その中の 指定したキー(delay)に対する >値をスライダーで変更するにはどうするのか? >それが問題です。 なので、それについて書いてたんですが。。 { duration: 500, fill: 'forwards', delay: 0, endDelay: 0 } ここが、optionsオブジェクトなので、 { duration: 500, fill: 'forwards', delay: v, ←こんな感じで、変数をいれるか? endDelay: 0 } または、Object waaなどで作って、 waa.delay=v; ←とそこだけ書き換えるか? 後はその変数を使ったAPIを叩けば継承されますので。 (と、ここまでの回答と同じなんですが) >JavaScript スライダーでオブジェクト変数の値を変更するには? が要定なので、あってるとおもいます。 後は、それを設定にループが使われてるようなので、 同じ用にセットすれば、満たされると思います。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

>スライダーを動かして >変数内のキー(delay)の値を >どうしたら変更できるのでしょうか? それだけだと、単に delay: 0, ←ここに、現在の最新スライダー値を入れるだけでコールって感じになっちゃいますが。 ってのは、前のを消して再設定してるようなので、 animation.cancel(); animations.push(animation); 単に、最終スライダー値を初期値にしたものを 与えて、 targets.forEach((target, i) => { こいつを、先ほどの、値が変化したときの、 疑似リスナーの中に入れれば、いいような。 (ってのを、わかってると思ったので、こういう回答だったんですよね) 意味間違ってました? { duration: 500, fill: 'forwards', delay: 0, endDelay: 0 } これを、Object化しておいて、例えばインスタンスの名前がwaa なら、疑似リスナーの時、waa.delay=最新のスライダー値 で、このwaaをこのオブジェクトがある位置にいれて、 おしまい?って意味だと思ったんですよね。 animate(keyframes, options) の、optionsをwaaにするだけでいいんじゃ? って考えたんですよね。 (だって、cancelしてるから、って意味で)

retorofan
質問者

補足

animation.cancel(); このコードを記述しないと アニメーションコードを読み取った直後に アニメーションを開始してしまうからなのです。 アニメーションコードは配列に格納していますので その中の 指定したキー(delay)に対する 値をスライダーで変更するにはどうするのか? それが問題です。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

おまけ!(単なる遊び) --部分抜粋-- <input type="range" id="delay_slider" min="0" max="100" value="0" step="10"> <input type="range" id="delay_slider2" min="0" max="100" value="0" step="10"> <script> $(function () { function custom_event(v) { console.log("waa2 " + v); $('input#delay_slider2').val(v); } --部分抜粋-- こうするだけで、スライダーのクローンが作れたので、 結構、、遊べるかも。 「スライダーで変数を動かす」+「変数でスライダーを動かす」 の融合系。

retorofan
質問者

補足

ご助言をありがとうございます。 本題は 「スライダー要素を動かして、 オブジェクト変数の値「delay」を変更するためには どういうコードで実現できますか?」 スライダーを動かして その値を表示させることは卒業しています。 スライダーを動かして 変数内のキー(delay)の値を どうしたら変更できるのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

<!-- <script src="このソースにはJQが必要です。"></script> --> <script src="../api_assets/jquery-3.5.1.min.js"></script> <input type="range" id="delay_slider" min="0" max="100" value="0" step="10"> <script> $(function () { function custom_event(v) { console.log("waa2 " + v); } /* これだと、離した時しか反応していない */ $('input#delay_slider').change(function() { console.log("waa " + $(this).val()); }); /* なんでもいい(この値が変化したらcustom eventを呼ぶ) */ let old=-1; $('input#delay_slider').mousemove(function () { let n=$('input#delay_slider').val(); if (old!=n) { old=n; /* custom event */ custom_event(n); } }); }); </script> 実際に試してみたところ(JQは使ってますが) スライダー自体は、「ボタンを離した」時しか イベントを発生させてないようなので、 「マウス」にリスナーをひっかけてそこから、 「ボタン」情報にアクセス。 しかし、それでは、ボタン以外を押してもイベントは 反応してしまうので、「ボタン」の値が 変化したか?をチェックして変化していたら、 「押したものが、そのボタンだと判断」 今回のサンプルだと、 custom_event(n); をカスタムのリスナーとして呼び出させています。 これで、リアルタイムに変化するので、後は これを好きに組み込めば、何個でも、行けるかと思います。 Jqueryは使ってますが、書いてる命令は 単純なJavaScriptのリスナーと同じ物なので、 置き換えて読んでもらうか、 jquery-3.5.1.min.js(など) (複雑な命令は使ってないので、バージョンはどれでもいい) をローカルにコピーしてscript src=..で取り込んであげれば 動きますので。

retorofan
質問者

補足

ご助言をありがとうございます。 スライダーの動かし方と値の取得方法は VanillaJSで 簡単に取得できますよ。 それよりも、本題の 「配列(animations)に格納された変数から キー(delay)に対する valueを どのようにすれば変更できるか?」 そのコードを知りたいのです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • jQueryで親カテゴリーが違う場合値を変えたい

    http://osvaldas.info/blog/elegant-css-and-jquery-tooltip-responsive-mobile-friendly こちらのソースをいじってます。 [rel~=tooltip]に当てはまる要素で現在選択してる物の親要素が.webなら~と条件分岐したいのですが、実行しても、[rel~=tooltip]が含まれる要素の中に.webがあるならみたいなニュアンスになってるようです。どうやればここに条件分岐できるのでしょうか? HTML↓ <html> <head>~</head> <body> <div class="web"><a href="" rel="tooltip">abc</a></div> <div class="none"><a href="" rel="tooltip">abc</a></div> </body> </html> jQuery↓ $( document ).ready( function() { var targets = $( '[rel~=tooltip]' ), target = false, tooltip = false, title = false; targets.bind( 'mouseenter', function() { target = $( this ); tip = target.attr( 'title' ); if(target.parent('.web')) { tooltip = $( '<div id="tooltip" class="web"></div>' ); }; if(target.parent('.none')) { tooltip = $( '<div id="tooltip" class="none"></div>' ); }; if( !tip || tip == '' ) return false; target.removeAttr( 'title' ); tooltip.css( 'opacity', 0 ) .html( tip ) .appendTo( 'body' ); }

  • jquery スライダーが動かない

    昨日質問をしてなんとかクリアしたのですが、次はスライダーが動かなくて困っています。 問題のサイト:http://snapkidz.biz/wp/ 先日の質問:http://okwave.jp/qa/q7180952.html 教えて頂いたのを元に構築をしてメイン画像部分をスライダーにしようと思い構築したのですがうまくいきませんでした。 <!-- External files --> <link rel="stylesheet" href="<?php bloginfo( 'stylesheet_url' ); ?>"> <!-- Favicon, Thumbnail image --> <link rel="shortcut icon" href="<?php bloginfo('template_url'); ?>/images/favicon.ico"> <?php wp_head(); ?> <!-- ======================================= スライダーテスト ======================================= --> <script type="text/javascript" src="http://snapkidz.biz/slider1/script.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.3/jquery.min.js"></script> <link rel="stylesheet" type="text/css" media="screen" href="http://snapkidz.biz/slider1/style.css" /> </head> <body> <div id="page"> <div id="wrapper"> <div class="header" id="Top"> <h1><img src="http://snapkidz.biz/wp/wp-content/uploads/2011/12/blk_03.jpg" alt="Art・・"></h1> <div class="nav"> <ul> <li class="nav1"><a href=""></a></li> <li class="nav2"><a href=""></a></li> <li class="nav3"><a href=""></a></li> </ul> </div> <div class="siteImage"> <div id="slider"> <div class="slider-view"> <div class="slider-container"> <div><a href="#"><img src="http://snapkidz.biz/slider1/images/image1.jpg" alt="" /></a></div> <div><a href="#"><img src="http://snapkidz.biz/slider1/images/image2.jpg" alt="" /></a></div> <div><a href="#"><img src="http://snapkidz.biz/slider1/images/image3.jpg" alt="" /></a></div> <div><a href="#"><img src="http://snapkidz.biz/slider1/images/image4.jpg" alt="" /></a></div> <div><a href="#"><img src="http://snapkidz.biz/slider1/images/image5.jpg" alt="" /></a></div> </div><!-- // .slider-container --> </div><!-- // .slider-view --> <a href="#" id="slide-prev">&laquo;</a><a href="#" id="slide-next">&raquo;</a> </div> <p><img src="http://snapkidz.biz/wp/wp-content/uploads/2011/12/blk_03.png" alt="" class="top" /></p> </div> でcssが html,body{margin:0;padding:0;} #wrapper{width:980px;margin:0 auto;position:relative;} div.header{border:sold 1px solid;} div.header h1{position:absolute;top:0;left:0;} div.header div.nav ul,div.header div.nav ul li{list-style:none;margin:0;padding:0;} div.header div.nav ul{display:block;height:70px;width:242px;text-align:right;background:url(http://snapkidz.biz/wp/wp-content/uploads/2011/12/blacknav.jpg);background-repeat:no-repeat;position:relative;left:737px;top:40px;} div.header div.nav ul li{display:inline;width:85px;} div.header div.siteImage{position:relative;width:100%;min-width:640px;} div.header div.siteImage img.top{position:absolute;top:-80px;left:400px;} です。 スライダーダウンロード元:http://unformedbuilding.com/articles/jquery-simple-loop-slider/ head部分の記載が違うのかと思ったのですが、そうではないようでした・・・ 何が原因なんでしょうか? 宜しくお願い致します。

  • JQueryのセレクタ

    jqueryでセレクタの取得をしたいのですがうまくいきません div要素の中のspan要素を取得したいのですがclassで取得すると重いのでid属性で場所を限定してからclass属性で絞り込みたいです こんな感じにしたらだめでした $("#hoge.foo").html('ほげ'); html <div id=hoge> <span class=foo></span> </div>

  • スクロールで画面が読み込まれたら動くようにしたい

    下記html、cssでテキストを動くようにしたのですがjavascript(jquery)で スクロールで画面が読み込まれたら動くようにしたいのですがどうすれば良いでしょうか。 素人なのでコピペで教えて欲しいです。 html <body> <section> </section> <div class="heading"> <div> <p class="slide-up">テキスト</p> </div> <div> <p class="slide-up">テキスト</p> </div> <div> </div> </body> </body> </body> css body, html { width: 100%; font-family: 'Times New Roman', Times, serif; } section { height: 200vh; } .fadeUp { animation-name: fadeUpAnime; animation-duration: 0.5s; animation-fill-mode: forwards; opacity: 0; } .heading { margin: 80px 0 0 80px; font-size: 15em; line-height: 90%; } .heading>div { overflow: hidden; } .heading>div>p { width: -webkit-max-content; width: -moz-max-content; width: max-content; white-space: nowrap; margin: 0; } div.heading>div { -webkit-animation-delay: 1s; animation-delay: 1s; } .slide-up { -webkit-animation: slid 2s cubic-bezier(0.65, 0, 0.35, 1) both; animation: slid 2s cubic-bezier(0.65, 0, 0.35, 1) both; } @-webkit-keyframes slid { 0% { transform: translateY(300px); } 100% { transform: translateY(0); } } @keyframes slid { 0% { transform: translateY(300px); } 100% { transform: translateY(0); } }

  • スクロールで画面が読み込まれたら動くようにしたい

    html、cssでテキストを動くようにしたのですがjavascript(jquery)で スクロールで画面が読み込まれたら動くようにしたいのですがどうすれば良いでしょうか。 html <body> <section> </section> <div class="heading"> <div> <p class="slide-up">salon</p> </div> <div> <p class="slide-up">info</p> </div> <div> </div> </body> </body> </body> css body, html { width: 100%; font-family: 'Times New Roman', Times, serif; } section { height: 200vh; } .fadeUp { animation-name: fadeUpAnime; animation-duration: 0.5s; animation-fill-mode: forwards; opacity: 0; } .heading { margin: 80px 0 0 80px; font-size: 15em; line-height: 90%; } .heading>div { overflow: hidden; } .heading>div>p { width: -webkit-max-content; width: -moz-max-content; width: max-content; white-space: nowrap; margin: 0; } div.heading>div { -webkit-animation-delay: 1s; animation-delay: 1s; } .slide-up { -webkit-animation: slid 2s cubic-bezier(0.65, 0, 0.35, 1) both; animation: slid 2s cubic-bezier(0.65, 0, 0.35, 1) both; } @-webkit-keyframes slid { 0% { transform: translateY(300px); } 100% { transform: translateY(0); } } @keyframes slid { 0% { transform: translateY(300px); } 100% { transform: translateY(0); } }

  • 次のhtml・cssでspan内の文字を点滅させる

    次のhtml・cssでspan内の文字を点滅させるには、どのようにしたらよいのでしょうか。 但し、テスト1が表示されている間は、テスト2と3は消えており、 テスト2、3が表示されている間はテスト1が消えている状態にしたいです。 なぜか、反復の意味を持つdurationタグの後ろに連結して、duration:blinkはできませんでした。 <div class="test"> <span class="brinking1">テスト1</span> <span class="brinking2">テスト2</span> <span class="brinking3">テスト3</span> </div> <style> .test { margin: auto; background-color: white; position: relative; } .test blinking { width: 50%; animation-name: test; -webkit-animation-name: test; animation-duration:blink 10s; -webkit-animation-duration: 10s; animation-iteration-count: infinite; -webkit-animation-iteration-count: infinite; opacity: 0;} .test .brinking1 { display: block; margin: 0 auto; } .test .brinking2,.test .brinking3 { animation-delay:5s; -webkit-animation-delay:5s; position: absolute; top: 0; left: 25%; } @keyframes test { 0% { opacity: 0; } 50% { opacity: 1; } } @-webkit-keyframes test { 0% { opacity: 0; } 50% { opacity: 1; } } </style>

    • 締切済み
    • CSS
  • クリックファンクションがうまくいかない

    class="link-block"のついたliつまりリストをクリックした時、.removeClass('active');でactiveというクラスを削除するようにしたかったのですが、 なぜかリストをクリックしても反応せずに削除されません。 id="maware"のliだけは、反応して削除されます。 CSSにとしてもだめでした。どうもclass="link-block"のついたリストをクリックできていないのかと思っているのですが、上下の順番でクリックできていないのでしょうか? .link-block { display: block; z-index: 99999; } ・ソースコード <div class="kuruttosuru">aaa</div> <!-- drawermenu --> <!-- drawermenu-button --> <div class="modal-button-wrap"> <a class="animation-hover action-hover modal-button-wrap__button"> <span class="modal-button-wrap__border"></span><!-- border --> <span class="modal-button-wrap__border"></span><!-- border --> <span class="modal-button-wrap__border"></span><!-- border --> </a> </div> <!-- drawermenu --> <nav> <div id="nav__drawermenu-wrap"> <ul> <li id="maware"><a class="link-block" href="#js-about-me">ABOUTME</a></li> <li><a class="link-block" href="#js-about-me"><span class="gotootherpage"><img class="top-gnav__link-sixth__goto-other-page" src="img/common-img/goto-other-page.svg" alt="goto-other-page-image"></span>ABOUTME</a></li> <li><a class="link-block" href="#js-gallary">GALLARY</a></li> <li><a class="link-block" href="#js-gmap">MAP</a></li> <li><a class="link-block" href="#js-contact">CONTACT</a></li> <li><a class="link-block" href="http:///index.html">TOP</a></li> <li><a class="link-block" href="http:///index.html">BLOG</a></li> </ul> </div> </nav> <!-- /drawermenu --> ・JS <script> $(function(){ $('.kuruttosuru').on('click', function() { $(this).addClass('active'); return false; }); }); </script> <!-- drawermenu-button-three-whiteline-クリックした際にクルット回るアクション --> <script> $(function(){ $('.modal-button-wrap__button, .link-block').on('click', function() { $(this).removeClass('active'); return false; }); }); </script> ・下記のJSがあると、うまくいかず下記をコメントアウトするとうまくいきます。 下記に何かおかしくなる要素があるのでしょうか? <!-- ページ内遷移 --> <script> $(function(){ // #で始まるアンカーすべてをクリックした場合に処理 $('a[href^=#]').click(function() { // スクロールの速度 var speed = 1000; // ミリ秒 // アンカーの値取得 var href= $(this).attr("href"); // 移動先を取得 var target = $(href == "#" || href == "" ? 'html' : href); // 移動先を数値で取得 var position = target.offset().top; // スムーススクロール $('body,html').animate({scrollTop:position}, speed, 'swing'); return false; }); }); </script> _____________

  • ヘッダーのa要素のメニューが消える

    ヘッダーに書いてあるテキストのコメントが消えてしまいます。 ご教示お願いします。 ここからHTML: <!DOCTYPE html> <html lang="ja"> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="style.css"> <head> <script src="code.jquery.com_jquery-3.7.0.min.js"></script> </head> ここら辺から書いてあるa要素のコメントが消えてしまいます。 <body> <header class="header"> <nav> <ul> <li><a href="/index.html" id="link_sample">ABOUT</a</li> <li><a href="#works" id="link_sample">WORKS</a></li> <li><a href="#gallery" id="link_sample">GALLERY</a></li> <li><a href="#service" id="link_sample">SERVICE</a></li> </ul> </nav> </header> ここまで: <ul> <li class="js-scroll-animation"><img width="1600" height="900" src="sdfsafasfas.png" alt=""></li> <li class="js-scroll-animation"><img width="1600" height="900" src="sdfsafasfas.png" alt=""></li> <li class="js-scroll-animation"><img width="1600" height="900" src="sdfsafasfas.png" alt=""></li> <li class="js-scroll-animation"><img width="1600" height="900" src="sdfsafasfas.png" alt=""></li> <li class="js-scroll-animation"><img width="1600" height="900" src="sdfsafasfas.png" alt=""></li> <li class="js-scroll-animation"><img width="1600" height="900" src="sdfsafasfas.png" alt=""></li> <li class="js-scroll-animation"><img width="1600" height="900" src="sdfsafasfas.png" alt=""></li> </ul> <script>const animations = document.querySelectorAll('.js-scroll-animation'); function toggle() { animations.forEach((animation) => { //ウィンドウの高さを取得 const height = window.innerHeight; //スクロール量を取得 const scroll = window.scrollY; //要素の位置を取得 const target = scroll + animation.getBoundingClientRect().top; //スクロール位置を判定して要素にクラスを付与 if (scroll > target - height / 1.5) { animation.classList.add('is-active'); } }); } //ロード時に発火 window.addEventListener('load', toggle); //スクロール時に発火 window.addEventListener('scroll', toggle);</script> </body> </html> ここからCSS: @charset "utf-8"; .header { background-color: lightgray; color: white; } #link_sample ul { display: inline; justify-content: center; } #link_sample li { font-size: 32px; list-style-type: disc; } #link_sample a { padding: 5px; text-align: center; } ul{ display: flex; flex-wrap: wrap; } li{ width: 50%; padding: 20px; box-sizing: border-box; justify-content: space-between; flex-wrap: wrap; /* 透過・非表示 */ opacity: 0; visibility: hidden; /* 要素の位置指定・アニメーション */ translate: 0 20px; transition: 1s; } img{ width: 40%; height: auto; } /* クラス付与で表示する */ .is-active{ opacity: 1; visibility: visible; translate: 0 0; }

    • ベストアンサー
    • CSS
  • img画像表示を短くしたい

    lemmon-slider-0.2  win8.1 pro 下記 img 45個 記述しています。表示が長いので、短くしたい。500個の場合もあります。 ひまわり美術館 http://esd827.web.fc2.com/himawari/index.html 詳細 IE11 F12開発者ツール 参照 <div id="nav"> <div class="wrap"> <div id="container"> <div class="wrap"> <div id="slider3" class="slider"> <ul> <li><img src="images/01.jpg" alt=""></li> <li><img src="images/02.jpg" alt=""></li> <li><img src="images/03.jpg" alt=""></li> ----- cut -------- <li><img src="images/43.jpg" alt=""></li> <li><img src="images/44.jpg" alt=""></li> <li><img src="images/45.jpg" alt=""></li> </ul> </div>

  • 画像を 並べる

    サイズの違う画像を並べているのですが、 サンブル通りにやると全て並んでしまいます。 3.4個おきに折り返したいのですが、cssを教えてください。 html <div class="flex-container"> <div class="flex-item"> <div class="image-wrap"> <img src="image1.jpg"> </div> </div> <div class="flex-item"> <div class="image-wrap"> <img src="image2.jpg"> </div> </div> <div class="flex-item"> <div class="image-wrap"> <img src="image3.jpg"> </div> </div> <div class="flex-item"> <div class="image-wrap"> <img src="image4.jpg"> </div> </div> </div> css htmlflex-container { display: flex; } .flex-item { flex-basis: 100%; } .image-wrap{ position: relative; overflow: hidden; padding-top: 60%; margin: 10px 5px; } .image-wrap img { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); width: 100%; height: 100%; }

    • ベストアンサー
    • CSS