Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript]Zmiana parametru w locie w pluginie jQuery
Forum PHP.pl > Forum > Przedszkole
universalStudio
Witam
mam przykladowy plugin jQuery:
  1. jQuery('#pagepiling').pagepiling({
  2. direction: directionType,
  3. scrollingSpeed: 700,
  4. normalScrollElements: '.normal-scroll'
  5. });

i chciałbym juz po zaladowaniu tego skryptu zmienic parametr w tym pluginie - coś w tym stylu:

  1. jQuery("body").click(function(){
  2. jQuery('#pagepiling').pagepiling.normalScrollElements='';
  3. });
Oczywiście to nie działa...

normalScrollElements: '.normal-scroll' - chcialbym wyczyścić ten parametr, tak zeby funkcja go nie przetwarzała już.
Czy żeby to zrobić, musze na nowo załadować funkcje/plugin ze zmienionym parametrem czy moge to na szybko zrobic, bez przeladowania calej funkcji a jedynie nadpisanie tego parametru? Jeśli da sie tak zrobić jak to się robi?
kamilo818
Może tak:
  1. var wartosc='.normal-scroll';
  2.  
  3. jQuery('#pagepiling').pagepiling({
  4. direction: directionType,
  5. scrollingSpeed: 700,
  6. normalScrollElements:wartosc
  7. });
  8.  
  9. jQuery("body").click(function(){
  10. wartosc='';
  11. });
  12.  
trueblue
  1. $.fn.pagepiling.options.normalScrollElements=null;
universalStudio
@kamilo818 Niestety to nie wplywa na zmiane parametru - ta funkcja zostala zainicjowana - jakby byla w setInterval to wtedy wylapala by zmiane, ale tu mamy raz zainicowanie i trzeba znalesc sposob, zeby ponownie zapodac pluginowi nowa zmienna. Najprosciej jest wywolac plugin na nowo ze zmieniona wartosia, ale czy to konieczne?

Cytat(trueblue @ 21.11.2014, 12:22:18 ) *
  1. $.fn.pagepiling.options.normalScrollElements=null;

wywala mi blad: Unhandled Error: Cannot convert 'jQuery.fn.pagepiling.options' to object
Wyglada na to ze nie rozpoznaje .options

  1. jQuery("body").click(function(){
  2. jQuery.fn.pagepiling.options.normalScrollElements=null;
  3. });
trueblue
Możesz napisać funkcją zmieniającą opcje.

  1. $.fn.pagepiling.setNormalScrollElements = function (value){
  2. options.normalScrollElements = value;
  3. };


tylko, że to nic nie da, bo w linni 525 w zależności od tej opcji są przypinane zdarzenia do document. Funkcja by była wywołana po przypięciu zdarzeń.
Nie wiem czy nie ma błędu logicznego w Twojej potrzebie modyfikacji.
universalStudio
to jest poczatek zrodla wtyczki:

  1. /* ===========================================================
  2.  * pagepiling.js 0.0.8 (Beta)
  3.  *
  4.  * <a href="https://github.com/alvarotrigo/pagePiling.js" target="_blank">https://github.com/alvarotrigo/pagePiling.js</a>
  5.  * MIT licensed
  6.  *
  7.  * Copyright (C) 2013 alvarotrigo.com - A project by Alvaro Trigo
  8.  *
  9.  * ========================================================== */
  10.  
  11. (function ($) {
  12. $.fn.pagepiling = function (options) {
  13. var container = $(this);
  14. var lastScrolledDestiny;
  15. var lastAnimation = 0;
  16. var isTouch = (('ontouchstart' in window) || (navigator.msMaxTouchPoints > 0));
  17. var touchStartY = touchStartX = touchEndY = touchEndX = 0;
  18.  
  19. //Defines the delay to take place before being able to scroll to the next section
  20. //BE CAREFUL! Not recommened to change it under 400 for a good behavior in laptops and
  21. //Apple devices (laptops, mouses...)
  22. var scrollDelay = 600;
  23.  
  24. // Create some defaults, extending them with any options that were provided
  25. options = $.extend({
  26. direction: 'vertical',
  27. menu: null,
  28. verticalCentered: true,
  29. sectionsColor: [],
  30. anchors: [],
  31. scrollingSpeed: 700,
  32. easing: 'swing',
  33. loopBottom: false,
  34. loopTop: false,
  35. css3: true,
  36. navigation: {
  37. 'textColor': '#000',
  38. 'bulletsColor': '#000',
  39. 'position': 'right',
  40. 'tooltips': ['section1', 'section2', 'section3', 'section4']
  41. },
  42. normalScrollElements: null,
  43. normalScrollElementTouchThreshold: 5,
  44. touchSensitivity: 5,
  45. keyboardScrolling: true,
  46. sectionSelector: '.section',
  47. animateAnchor: false,
  48.  
  49. //events
  50. afterLoad: null,
  51. onLeave: null,
  52. afterRender: null
  53. }, options);
  54. [...]

jest tam object options wiec dziwne ze nie lapie...

Cytat
Nie wiem czy nie ma błędu logicznego w Twojej potrzebie modyfikacji.

co masz na mysli? Zle podejscie?
trueblue
Nie wiem co chcesz osiągnąć. Może się mylę.
Dlaczego te elementy najpierw podajesz w parametrze, a potem chcesz się ich pozbyć?
universalStudio
tam jest taki prametr normalScrollElements - w ktorym daje sie klase bloku w ktorym ma nie dzialac akcja scrolla dla przewijania tych slajdow stron, ale to ma dzialac tylko w przypadku kiedy nie ma suwaka ktoryz koleji powstaje gdy ejstw iecej tekstu dla overflow auto. Wtedy ma nie dzialac scroll dla wtyczki aby mozna bylo scrollowac tekst w w owerflow auto

taka ciekawostka, uzylem funkcji emulujacej print_r()
  1. function print_r(o){ function f(o, p, s) { for(x in o) { if ('object' == typeof o[x]) { s += p + x + ' obiekt: \n'; pre = p + '\t'; s = f(o[x], pre, s); } else { s += p + x + ' : ' + o[x] + '\n'; } } return s; } return f(o, '', '');}
  2. jQuery("body").click(function(){
  3. console.log(print_r(jQuery.fn.pagepiling));
  4. //jQuery.fn.pagepiling.options.normalScrollElements=null;
  5. });

dla javascript i takie cos otrzymuje:
  1. setScrollingSpeed : function(value){
  2. options.scrollingSpeed = value;
  3. }
  4. setMouseWheelScrolling : function (value){
  5. if(value){
  6. addMouseWheelHandler();
  7. }else{
  8. removeMouseWheelHandler();
  9. }
  10. }
  11. setAllowScrolling : function (value){
  12. if(value){
  13. $.fn.pagepiling.setMouseWheelScrolling(true);
  14. addTouchHandler();
  15. }else{
  16. $.fn.pagepiling.setMouseWheelScrolling(false);
  17. removeTouchHandler();
  18. }
  19. }
  20. setKeyboardScrolling : function (value){
  21. options.keyboardScrolling = value;
  22. }
  23. moveSectionUp : function () {
  24. var prev = $('.pp-section.active').prev('.pp-section');
  25.  
  26. //looping to the bottom if there's no more sections above
  27. if (!prev.length && options.loopTop) {
  28. prev = $('.pp-section').last();
  29. }
  30.  
  31. if (prev.length) {
  32. scrollPage(prev);
  33. }
  34. }
  35. moveSectionDown : function () {
  36. var next = $('.pp-section.active').next('.pp-section');
  37.  
  38. //looping to the top if there's no more sections below
  39. if(!next.length && options.loopBottom){
  40. next = $('.pp-section').first();
  41. }
  42.  
  43. if (next.length) {
  44. scrollPage(next);
  45. }
  46. }
  47. moveTo : function (section){
  48. var destiny = '';
  49.  
  50. if(isNaN(section)){
  51. destiny = $('[data-anchor="'+section+'"]');
  52. }else{
  53. destiny = $('.pp-section').eq( (section -1) );
  54. }
  55.  
  56.  
  57. if(destiny.length > 0){
  58. scrollPage(destiny);
  59. }
  60. }

w ogole nie pokazuej options...
trueblue
  1. if(options.normalScrollElements){
  2. $(document).on('mouseenter', options.normalScrollElements, function () {
  3. //tu daj warunek, jeśli nie ma scrolla to
  4. $.fn.pagepiling.setMouseWheelScrolling(false);
  5. });
  6. ...

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.