1

I have function which is determining width of my timeline. I want to set width for desktop and mobile devices separately. How can I write them that if desktop so use this code else if mobile, use another code?

If(mobile) { use js function for mobile } else { use js function for desktop }

Here is js fucntion for desktop

 function setTimelineWidth(timelineComponents, width) {
//Line 3 is set width 100%
   totalWidth = $(window).width((timelineComponents['timelineDates'].length * 100));
   //}
  timelineComponents['eventsWrapper'].css('width', totalWidth+'px');
  updateFilling(timelineComponents['eventsWrapper'].find('a.selected'), timelineComponents['fillingLine'], totalWidth);
  updateTimelinePosition('next', timelineComponents['eventsWrapper'].find('a.selected'), timelineComponents);
 
  return totalWidth;
 }

And here is js function for mobile width

 function setTimelineWidth(timelineComponents, width) {
  var timeSpan = daydiff(timelineComponents['timelineDates'][0], timelineComponents['timelineDates'][timelineComponents['timelineDates'].length-1]),
   timeSpanNorm = timeSpan/timelineComponents['eventsMinLapse'],
   timeSpanNorm = Math.round(timeSpanNorm) + 4,
   totalWidth = timeSpanNorm*width;
  timelineComponents['eventsWrapper'].css('width', totalWidth+'px');
  updateFilling(timelineComponents['eventsWrapper'].find('a.selected'), timelineComponents['fillingLine'], totalWidth);
  updateTimelinePosition('next', timelineComponents['eventsWrapper'].find('a.selected'), timelineComponents);
 
  return totalWidth;
 }
Omar
  • 32,160
  • 9
  • 67
  • 108
Namik
  • 47
  • 1
  • 7
  • Here's a great answer for [how to detect a mobile device](https://stackoverflow.com/questions/3514784/what-is-the-best-way-to-detect-a-mobile-device-in-jquery) – Zevgon Aug 27 '17 at 12:30
  • @Zevgon yes I saw it. but if I add it, it is not working. If I write `if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) { MY JS FUNCTION FOR MOBILE }`it is not working – Namik Aug 27 '17 at 12:36

2 Answers2

0
  if(typeof window !== 'undefined'){
        var ua = 'navigator' in window && 'userAgent' in navigator &&
            navigator.userAgent.toLowerCase() || '';
    }     
   var judge = {
            isMobile: function () {
                        return !!ua.match(/(iPhone|iPod|android|ios|iPad|windows 
            phone|tablet)/i);
                    },
                    isPc: function () {
                        return !judge.isMobile();
                    }
        }           

        if(judge.isMobile()){
        //mobile
        }else(judge.isPc()){
        //pc
        }

plus,I also wrote an NPM packages for judging,https://github.com/hawx1993/judge

Alvin
  • 210
  • 2
  • 13
  • Dear Alvin. Thank you for reply. Unfortunately it does not work for me. I did smth wrong, can you tell me plz what is wrong here? I inserted code to fiddle [here is js function](https://jsfiddle.net/hchsf4jn/) – Namik Aug 27 '17 at 14:29
  • I mean it is not returning totalwidth for me – Namik Aug 27 '17 at 14:42
  • return !!ua.match(/(iPhone|iPod|android|ios|iPad|windows phone | tablet)/i); because the `/` and `i` has blank – Alvin Aug 28 '17 at 05:26
  • Sorry, but I need your help. I inserted function to fiddle, do you mean this? [FIDDLE](https://jsfiddle.net/vzezuvvw/) – Namik Aug 28 '17 at 06:02
0

Change your code to this

        var setTimelineWidth;//this is going to be your function based on device
        function IsMobile() {
          var Uagent = navigator.userAgent||navigator.vendor||window.opera;
            return(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(Uagent)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(Uagent.substr(0,4))); 
        };
        if (IsMobile()) 
        {
          setTimelineWidth = function(timelineComponents, width) {
            //Line 3 is set width 100%
            totalWidth = $(window).width((timelineComponents['timelineDates'].length * 100));
            //}
            timelineComponents['eventsWrapper'].css('width', totalWidth + 'px');
            updateFilling(timelineComponents['eventsWrapper'].find('a.selected'), timelineComponents['fillingLine'], totalWidth);
            updateTimelinePosition('next', timelineComponents['eventsWrapper'].find('a.selected'), timelineComponents);

            return totalWidth;
          }
        } 
        else 
        {
          setTimelineWidth = function(timelineComponents, width) {
            var timeSpan = daydiff(timelineComponents['timelineDates'][0], timelineComponents['timelineDates'][timelineComponents['timelineDates'].length - 1]),
              timeSpanNorm = timeSpan / timelineComponents['eventsMinLapse'],
              timeSpanNorm = Math.round(timeSpanNorm) + 3,
              //totalWidth = (timelineComponents['timelineDates'].length * 100)
              totalWidth = $(window).width((timelineComponents['timelineDates'].length * 100));
            timelineComponents['eventsWrapper'].css('width', totalWidth + 'px');
            updateFilling(timelineComponents['eventsWrapper'].find('a.selected'), timelineComponents['fillingLine'], totalWidth);
            updateTimelinePosition('next', timelineComponents['eventsWrapper'].find('a.selected'), timelineComponents);

            return totalWidth;
          }
        }
Ananthakrishnan Baji
  • 1,006
  • 1
  • 6
  • 19
  • Thank you for reply. How can I use this function for if else condition? Cause my js function for pc is working all time and returnin width 100%, i should block that function if device is mobile. – Namik Aug 28 '17 at 06:50
  • if(IsMobile()) { //do mobile stuff here } else { //do desktop function here } – Ananthakrishnan Baji Aug 28 '17 at 07:29
  • that is the problem it is not working for me if I do as you wrote. I inserted code to fiddle [FIDDLE](https://jsfiddle.net/g7Led4jy/) . It is not returning totalWidth value and show nothing on page. – Namik Aug 28 '17 at 10:42
  • My function(IsMobile) is working, https://codepen.io/devbaji/pen/QMZdQo visit this pen on both desktop and mobile, mobile it will alert true, but on desktop it will alert false – Ananthakrishnan Baji Aug 28 '17 at 11:16
  • Dear Ananthakrishnan Baji, yes it is working with alert for me also. My problem is to active mobile function(disable pc function) if it is mobile and reverse if device is PC. Look please to [LINK FOR FIDDLE](https://jsfiddle.net/g7Led4jy/) . I did like you said, and it is not returning value for me. Check it please from [LINK FOR FIDDLE](https://jsfiddle.net/g7Led4jy/). – Namik Aug 28 '17 at 12:16
  • Ok check the edited answer hope it worked, now setTimelineWidth will behave differently based on the device, check the pen again https://codepen.io/devbaji/pen/QMZdQo – Ananthakrishnan Baji Aug 28 '17 at 14:08
  • Very strange that if is insert function, it is not allerting anymore(not working). Check please from [fiddle link](https://jsfiddle.net/f5qmqLoL/) – Namik Aug 29 '17 at 05:29
  • Your fiddle is not working because there are errors in your function, $ (jQuery) is not defined or inclued see console, correct the error in your project instead of using fiddle because timelineComponents['timelineDates'][0] will also promt error since we call the function with "null" – Ananthakrishnan Baji Aug 29 '17 at 13:56
  • Dear Ananthakrishnan Baji, these functions are working if I do not use conditions(if, else). I mean there are no errors. if use them devided. I can not understand why error accured... – Namik Aug 30 '17 at 05:36
  • Either if OR else will definitely work, thats why its called if else :D, but you are telling that even the alert (which is both inside if and in else right ?), is not working, this only happens if there is an error :( – Ananthakrishnan Baji Aug 30 '17 at 05:51
  • You are right, but it is very strange!)) How they can work devide as function and stop working if put them into condtitions? :( I realy can not catch an error. That`s why i do not like jquery, JS, cause they do not tell errors)) – Namik Aug 30 '17 at 06:27
  • Sorry friend cant help, i didn't encountered such a problem in my entire javascript life :D, maybe your javascript compiler gone crazy :( – Ananthakrishnan Baji Aug 30 '17 at 06:31
  • thank you my friend for help, I will try to check whole functions from begining!) – Namik Aug 30 '17 at 06:34